Ардуинки, ESP, программирование
96 subscribers
51 photos
8 videos
5 files
15 links
Канал о программировании и вообще об электронике

Вот наш чат: https://yangx.top/arduinki_esp_chat
加入频道
1. Сейчас заметил, что у меня уже 2^5 подписчиков
2. Решил ещё немного подождать, так что только теперь объявляется конец первой части конкурса. Присылать проекты можно и дальше до (теперь) понедельника, но голосование будет сегодня, потом новые пункты добавлять нельзя
Вот проекты.
1. Светодиодный куб
2. Эффект на адресной ленте
3. Радар на лазерном дальномере
4. Гирлянда Гайвера (которая твинкли)

П. С. В четвёртом нет фотографии, но проект вроде собран. Гирлянда твинкли (гайверовская версия)
вроде если я правильно понял, то это то видео
Короче на всякий случай ещё немного подождал с результатами, но теперь точно всё.

1. Радар на лазерном дальномере (голосование)
2. Куб из диодов (т.к. его сложно делать)

П. С. Кстати я опять заболел, так что дописание прошивки откладывается
А теперь расскажу про условия.
Чтобы код выполнялся в зависимости от каких-то данных, есть условия. Это работает так:
bool a = 1, b = 0;
if (a) { // выполнится, если а = 1. Если бы а была типа инт, то выполнится и от любого другого числа (в том числе отрицательного), кроме 0
// что-то сделать
}
if (!b) { // выполнится, если б = 0
// что-то сделать
}
if (a && b) { // выполнится, если и а, и б = 1
// что-то сделать
}
if (a || b) { // выполнится, если а или б равны 1
// что-то сделать
}
Кроме иф ещё есть else
bool a;
if (a) {
// не выполнится
} else { // если !a
// выполнится
}
Проще говоря внутри скобок пишется переменная или выражение. Можно использовать операторы:
&& — И. Можно использовать and
|| — ИЛИ. Можно использовать or
== — равно
! — меняет 0 на 1 и наоборот.

Кстати. Скобку лучше писать на той же строке, где иф/else/объявление функции. Так код будет занимать меньше строчек.
А ещё в конце каждой строки(если она не пустая и не заканчивается { или } ) надо писать ;

#начало
#уроки
А теперь коротко про циклы.
Иногда бывает надо сделать много ± одинаковых команд. Чтобы не писать каждую вручную, есть циклы. Они бывают 3 видов, но обычно используют два.
1. Цикл while
bool s = 1;  // есть переменная
while (s) { // пока она ==1
s = digitalRead(3); // считывать её значение
}
В скобках пишется любое выражение. Проще говоря, это иф, но пока выражение ==1, он циклично выполняется.
ВНИМАНИЕ: если значение в скобках не меняется и не станет равным 0, цикл не завершится!!!
2. Цикл for
for (int i = 0; i < 10; i++) {
// тут можно что-то делать
}
Тут в скобках есть три части, которые разделяются ;
(объявление переменной; условие выполнения; изменение переменной)
Всё части необязательны, но ; должны быть. Например
(;i < 10;)
Внимание: если используется переменная, она должна быть объявлена!
3. Цикл do
bool s = 0;
do {
s = digitalRead(3);
} while(s);
Этот цикл почти while, но выполнится 1 раз даже если выражение в скобках изначально == 0.

Кстати ещё напишу про операторы:
>, < тут понятно
>= больше или равно
<= меньше или равно
++ плюс 1
-- минус 1

Дополнение:
a++ — к а просто прибавится 1 и вернётся старое значение
++a — к а прибавится 1 и вернётся новое значение

П. С. Скоро выйдет большой урок про сервер на есп!

#начало
#уроки
server.ino
5.4 KB
А вот и сервер на есп. Здесь подробно объяснять не буду, в прошивке есть комментарии. Потом напишу как делать html, но если посмотреть, наверное можно продолжить по аналогии. Схема простая. Диод подключается к D4, SDA дисплея к D2, SCL к D1. До этого была кнопка, но она себя нестабильно ведёт. Поэтому вместо неё останется просто для примера отправка 1

А теперь как этим пользоваться.
1. Сначала надо включить монитор порта и поменять скорость с 9600 на 115200
2. Потом надо перезагрузить вемос. На экране будут точки, а потом появится айпи адрес
3. Его надо вбить в браузер
4. Должен появиться интерфейс
5. Всё. Можно управлять диодом и дисплеем

#уроки
#вифи
#espшки
Схема с кнопкой. Кстати там в прошивке настройка яркости диода, вывод текста на дисплей и получение числа с ардуины
А сейчас коротко про библиотеки.
Иногда в проекте используются сторонние железки, работать с которыми сложно, или другие сложные штуки(вифи, веб интерфейс и другое). К счастью, хорошие люди написали всё это за нас. Нам остаётся скачать файл и подключить. Скачивается разными способами:
1. Автоматически. Надо зайти в менеджер библиотек (ctrl + shift + i), написать название и нажать скачать.
2. Вручную. Скачивается архив и распаковывается в
C:\Program Files\Arduino\libraries
Или можно в приложении нажать добавить .zip библиотеку

В прошивке это выглядит так:
#include <GyverHub.h>  // в скобках пишется название библиотеки и в конце .h Компилятор ищет библиотеку в папке с библиотеками 
#include "testlib.h" // если в кавычках — сначала компилятор ищет библиотеку в папке с проектом, а потом в папке с библиотеками
П. С. Много хороших библиотек написал Гайвер. В поиске менеджера библиотек можно написать Gyver и посмотреть. Ещё можно посмотреть на сайте Гайвера.
П. П. С. Библиотеки можно делать самим, но это уже совсем другая история

#уроки
#ардуиноиде
#начало
А сейчас вы узнаете, что такое гайверхаб и как им пользоваться.
Иногда бывает надо управлять железками удалённо, но заморачиваться с самостоятельной реализацией не хочется. Или просто надо управлять чем-то из интернета. Для этого Гайвер сделал гайверхаб.

1. Структура программы
В сетупе подключается вифи, настраивается mqtt, запускается хаб и подключается билдер:
hub.mqtt.config("test.mosquitto.org", 1883);
hub.onBuild(build);
hub.begin();
2. Билдер
В нём настраиваютя компоненты и записываются значения в переменные. Билдер обычно делают перед сетупом
void build(gh::Builder& b) {
GH_ROW(b, 1,
b.Button().size(2);
b.Button(););
}
3. Компоненты
b.Название(параметры);
Ещё параметры можно задавать в цепочку, как в прошлом пункте
.size(x) — размер виджета в долях
.label(s) — подпись к виджету
.color(c) — цвет
.attach(&flg) — подключить флаг
.attach(func) — подключить функцию

Все виджеты описывать не буду, есть документация

4. Установка
Надо зайти на гитхаб, тыкнуть на old, переключить. на dev, потом code и download zip. Скачается архив с библиотекой. Потом надо зайти в скетч->подключить библиотеку->добавить .zip библиотеку, выбрать файл гайверхаба и подождать.
Ещё надо установить другие библиотеки, всё подробно расписано там.

5. Документация
https://github.com/GyverLibs/GyverHub/wiki
Там написано как пользоваться гайверхабом. Хоть там и про старую версию, но некоторые вещи пересекаются. А вообще рекомендую посмотреть примеры

Это далеко не всё, так что будет ещё один хэштег #гайверхаб
П. С. Чё-то в последнее время я на процессинге много кодить стал, так что предлагайте идеи, что на нём можно сделать (процессинг — это как ардуино, но на компьютере)
П. П. С. Гайверхаб работает не только с еспшками, но это уже совсем другая история
П. П. П. С. Спойлер: возможно скоро будет автополив и машинка на управлении по вифи

#уроки
#вифи
#espшки
#библиотеки
А сейчас вы узнаете про i2c дисплей 1602(или 2004) и как с ним работать.
1. Описание
Этот дисплей — самый стандартный(может и распространённый) для ардуино поделок. Он бывает 16 символов на 2 строки, 20 на 4 и других размеров. Мы будем использовать 16 на 2 и 20 на 4. Желательно брать дисплей с i2c конвертером, т.к. будет занимать всего 2 ноги
2. Прошивка
#include <LiquidCrystal_I2C.h>  // подключение 
LiquidCrystal_I2C lcd(0x27, 16, 2); // инициализация дисплея. 0х27 это адрес, может быть 0х3f
void setup() {
lcd.init(); // запуск
lcd.backlight(); // вкл. подсветку
lcd.clear(); // всё стереть
lcd.print("hello world"); // вывести хеллоу ворлд
lcd.setCursor(0, 1); // печатать на 2 строке
lcd.print(12345); // вывести 12345
}
void loop() {}
3. Библиотеки
Надо скачать библиотеку LiquidCrystal_I2C и всё
4. Подключение
Sda к A4
Scl к A5

П. С. На дисп нельзя просто так вывести русские буквы, надо немного схитрить. Но это уже совсем другая история

#уроки
#avrки (но дисп и с еспшками работает)
#железки
#библиотеки
Спецвыпуск!
1. В прошлом году на канале был проект ромболампы. Сейчас я решил её сделать (т.к. разобрал, а она понадобилась), а она не компилится. Короче Гайвер выпустил новый гайверхаб. В ближайшее время я перепишу прошивку и пришлю сюда. А чтобы завести ту прошивку, надо скачать прошлую версию библиотеки и управлять с сайта https://hub.gyver.ru/old

#поделки
#гайверхаб
#библиотеки

2. Новый вемос
Китайцы стали делать другой вемос с type c, и он может не шиться стандартным способом. Хотя такое может быть и со старым. Для него надо выбрать плату generic esp8266 module и flash mode поставить dout

#espшки
#ардуиноиде
А сейчас вы узнаете как использовать 2 ядра есп32 одновременно и зачем это + как прошить еспшку, если она не шьётся.
1. Иногда проект получается сложный криво работает. Возможно это из-за того, что не хватает частоты процессора. Поэтому отваливается вайфай и всё работает медленно. В таком случае можно использовать оба ядра (у есп32 их 2). Делается это так:
#define LED1 22 // пин диода
#include "soc/timer_group_reg.h" // так надо
#include "soc/timer_group_struct.h"
TaskHandle_t Task0; // задача
void setup() {
//pinMode(LED1, OUTPUT);
Serial.begin(115200); // вкл юарт
Serial.println(); // новая строка
// функция имя стёк* ? ? задача ядро
xTaskCreatePinnedToCore(core0, "Task0", 10000, NULL, 1, &Task0, 0); // подкл. задачу
// * - но это не точно
}
void loop() {
static uint32_t tmr = millis(); // таймер на миллисе
if (millis() - tmr >= 1000) {
tmr = millis();
Serial.println(millis() / 1000); // вывести время в секундах с запуска
}
}
// функция
void core0(void *p) {
pinMode(LED1, OUTPUT); // пин диода на выход
static bool flag; // флаг состояния
static uint32_t tmr2; // для таймера на миллисе
for (;;) { // вечно крутиться
if (millis() - tmr2 >= 500) { // таймер на миллисе
tmr2 = millis();
digitalWrite(LED1, flag = !flag); // мигать
}
// так надо. Чтоб ошибок не было
TIMERG0.wdt_wprotect = TIMG_WDT_WKEY_VALUE; // write enable
TIMERG0.wdt_feed = 1; // feed dog
TIMERG0.wdt_wprotect = 0; // write protect
}
}
Кстати всё изначально запускается на 1 ядре (втором. Нумерация с 0)

2. Еспшка может не прошиваться по нескольким причинам. Не тот юсб порт, нет драйверов, плохой кабель, проблемы с памятью и др.
Первые три пункта уже объяснялись на канале. А вот с памятью всё сложнее. Надо выбрать порт, открыть монитор порта, поставить скорость 115200 и нажать ресет на еспшке. В порт пришлётся много информации. Надо найти что-то типа 1)DIO/QIO/DOUT и 2)80MHz/40MHz. Потом зайти в инструменты, в flash mode поставить из 1), а в flash frequency из 2). И ещё. Чтобы прошить еспшку, надо зажать кнопку boot и кликнуть по reset. Потом можно прошивать

#espшки
#вифи
#ардуиноиде
#уроки
Кстати вот эти настройки, которые надо поставить в моём случае
Ещё может в мониторе порта быть такое. Возможно (но это не точно), clock div это делитель частоты. В моём случае на 2. Так что надо 80 надо разделить на это число, и будет 80 / 2 = 40 MHz

П. С. Ещё скорость порта можно попробовать поставить 74880, если ничего такого нет
Спецвыпуск (частично)
1. Давно ничего не выходит, потому что сейчас 1) я хожу в школу и 2) делаю разные штуки:
Поливатор(первый вариант кода в чате, но надо поискать)
Подниматор манипулятор из картона, соплеклея и шприцов (видео в комментах)
+ читаю про новый грайверхаб.
В ближайшие время сначала будет про поливатор, потом про адресную ленту, потом про гайверхаб (ещё раз)

2. Если тут есть женщины, то с 8 марта