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

Вот наш чат: https://yangx.top/arduinki_esp_chat
加入频道
Всем привет! На связи я, а это канал об электронике(это и так понятно). Всего будет 8 видов сообщений(уже больше):
#начало - для новичков
#avrки - для тех, кто уже что-то знает
#espшки - для тех, кому уже мало обычных ардуинок
#вифи - для тех, кому нравится вайфай
#поделки - для тех, кто зашёл поглазеть
#ардуиноиде - фишки и настройка ArduinoIDE
#резисторы - радиоэлектроника и собирание схем
#платки - виды ардуинок, еспшек и других камушков
#уроки — ну тут всё понятно
#железки — всякие датчики и модули
#библиотеки — использование разных библиотек
#гайверхаб — гайверхаб
#адреска — адресная лента

В следующем сообщении будут основные термины
👍1
Пришло время терминов. Начнём с простого:
Ардуинка - простонародное название плат Arduino, которые могут выполнять разные функции(от открывания двери, подсветки и сигнализации, до умного дома).
Еспшка - контроллер от фирмы Espressif. Мощный, много памяти и есть wifi. Бывает esp8266(мини-версия) и esp32(тот самый очень мощный контролер). Бывает с камерой(как на фотографии канала).
Камушек, камень - микроконтроллер - простыми словами штука, которая делает то, что напишешь в прошивке. Сложными - схема из транзисторов, способная выполнять команды.
Arduino IDE - среда разработки прошивок для еспшек и ардуинок.
Из простых терминов всё. Потом будут из электроники.
#начало
#уроки
2
А теперь электроника:
ток(или сила тока) (I) - условно говоря, кол-во электронов в момент времени в проводе. Именно из-за него нельзя втыкать пальцы в розетку. Измеряется в Амперах(А)
напряжение(U) - разность потенциалов между двумя проводами: если на одном относительно нуля 3В, а на другом 8В, то напряжение 8-3=5В. Измеряется в Вольтах(В, V)
резистор - элемент, ограничивающий ток. Основная характеристика резистора - сопротивление. Измеряется в Омах(например, 5 Ом, 10кОм)
мощность(P) - произведение тока и напряжения. Измеряется в Ваттах(Вт, W)
закон Ома - главный закон электроники. I = U/R.
Более подробно про эти первые термины в этом видео и на этом сайте

постоянное напряжение - когда напряжение всегда примерно одинаковое
переменное напряжение - когда напряжение меняется(как в розетке), чаще всего синусоидой

конденсатор - элемент, который может сглаживать сигнал, задерживать заряд и отделять переменную составляющую сигнала от постоянной. Основная характеристика - ёмкость. По идее измеряется в Фарадах, но почти всегда используют микрофарад(мкФ, uF)

транзистор - полупроводниковый элемент, он усиливает сигнал. Транзисторы бывают разных видов
диод - тоже полупроводниковый элемент. Он проводит ток только в одном направлении, а ещё способен сделать из переменного тока постоянный
Это далеко не всё, но думаю пока хватит, дальше будет уже про ардуинки.
#начало
#резисторы
#уроки
2👍1
Всем привет! Сегодня я расскажу вам об ардуине нане.
Обзор платы:
Все ноги этой ардуинки делятся на 4 группы: питание(5в, 3,3в, gnd), gpio (обычные ноги, которыми можно управлять), управляющие(aref, rst) и среди gpio есть ноги для подключения специальных датчиков.
Основа этой платы — микроконтроллер ATmega328p с архитектурой AVR. В нём 30 КБ flash памяти, в которой хранится программа, 2 КБ оперативной памяти под переменные(потом расскажу про них) и 1КБ энергонезависимой еепром памяти, в которой можно хранить настройки. Частота у этого камушка небольшая, всего 16МГц, но для большинства под(д)елок этого хватает. У наны 30 ног, из них 20 обычные и 2 только аналоговые. Среди этих 20 ног есть 6 ШИМ ног(для плавного управления яркостью, скоростью и т.д.), и ещё 6 аналоговых ног. Так же у наны есть по одному интерфейсу I2C, UART, SPI. Ноги этих I2C, UART и SPI как раз та самая 4 группа из начала сообщения.
В следующем сообщении будет про программирование наны. И про то, почему лучше нана, а не уна!
#платки
#начало
#уроки
👍2🔥1
Сегодня, как и ожидалось, мы будем программировать нану. Сначала надо установить ардуино иде, заходим на офф.сайт, тычем на версию 1,8 если система 32 битная и виндовс 7 и выше, если ниже, то 1.6.13, а если 64, то можно ставить версию 2,2(можно и меньше). Теперь нужно поставить драйвер на ch340 по этой ссылке(кстати на этом сайте хорошо описан процесс установки, всё таки в телеграме есть ограничение на длину текста) . Потом запускаем ардуино иде, заходим в инструменты->плата->(AVR boards->)arduino nano. Далее, если плата китайская, надо в инструменты->процессор(загрузчик) и меняем на ATmega328p old bootloader,а порт меняем на любой, кроме com1. Если других нет, проблема с платой или кабелем.Для проверки платы можно загрузить тестовую прошивку. Она называется блинк и мигает встроенным диодом на плате. Чтобы её загрузить, переходим в файл->примеры->basic->blinc, ждём пока всё загрузится и нажимаем стрелочку в верхнем левом углу или ctrl+u. Всё! Спустя пару секунд диод начнёт мигать.
А теперь сравнение другой ардуины уны и уже известной наны:у уны столько же памяти, но унаны на 2 ноги больше. 1:0 в пользу наны.
Уна большая. Нет, огромная! А нана компактная. 2:0 в пользу наны.
Нана втыкается в макетную плату. Или по простому, в макетку. Уна висит на проводочках. 3:0.
Нану можно паять для всяких самоделок. С уной так нельзя делать. Или будет очень неудобно. 4:0
У некоторых нан разъём для прошивки микро юсб. Он легко отрывается. Стандартный для нан мини юсб сложнее оторвать. У уны громоздкий и малоудобный юсб тип б. Его практически невозможно сломать. 4:0,5.
Выбор очевиден.
#начало
#платки
#ардуиноиде
#уроки
👍2
А сегодня мы подготавливаемся а настоящему программированию. Будем изучать структуру программы.
Изначально, если открыть ардуино иде, можно увидеть следующее:
void setup() {
// put your setup code here, to run once
}
void loop() {
// put your main code here, to run repeatedly:
}
А теперь объяснение:
void setup - основная функция, внутри скобок пишутся команды, которые должны выполниться один раз. Например, инициализация датчиков, настройка пинов и т.д.
void loop() - главная функция, команды в ней повторяются циклично: выполнилась последняя и всё начинается с начала loop'a.
// слова
- комментарий. В выполнении программы не участвует. Есть ещё многострочный комментарий, у него с /* и до */ всё пропускается:
/*
Коты
Ардуинки
Ещё что-то
*/
А потом будем разбираться с переменными

#начало
#уроки
👍2
Ардуинки, ESP, программирование
А потом будем разбираться с переменными
Наконец-то дошли руки написать этот пост. Очень сильно проще показать всё на картинке. В следующем сообщении будет пример программы + типы данных
П. С. Надеюсь кто-нибудь поймёт мой почерк)
#начало
#уроки
👍3
Ардуинки, ESP, программирование
Наконец-то дошли руки написать этот пост. Очень сильно проще показать всё на картинке. В следующем сообщении будет пример программы + типы данных П. С. Надеюсь кто-нибудь поймёт мой почерк) #начало #уроки
Перед примером программы надо кое-что ещё уточнить. С переменными работают почти все математические операции(корень и степень записываются подругому). Чтобы не писать a = a + 1;
Можно написать а += 1. Ещё есть особенный оператор — %. Это остаток от деления. Например 5%2=1 , 8%3=2 , 123%100=23.

Чтобы вывести на экран переменную или какой-нибудь текст, надо написать
Serial.print("ваш текст");
ВАЖНЫЕ ДОПОЛНЕНИЯ: 1.чтобы вывести число или переменную, кавычки НЕ нужны. Для текста они обязательны!
2.этим способом весь текст выводится в одну строку, это неудобно. Если не надо выводить что-то типа
Значение 1: 1234
то лучше заменить print на println. Это выведет в столбик. 3.чтобы всё это работало, внутри {} скобок void setup надо написать Serial.begin(9600);
Это инициализация uart'а.
А сейчас программа...
#начало
#уроки
👍2
Для всего следующего, сначала надо понять, как работает макетная плата(макетка). На первой картинке её изображение, на второй показано, как соединены контакты

#начало
#уроки
Перед тем, как будет обзор железок, надо ещё кое-что рассказать. У ардуины есть 2 вида ног: цифровые и аналоговые. Почти все ноги могут быть входом и выходом сигнала. У обычных avr'ок нет ЦАПа, т.е. они не могут выдавать аналоговый сигнал. Только 0 и 1. Но есть ШИМ, и он позволяет плавно управлять яркостью, скоростью и т.д. У есп есть и ЦАП, и ШИМ. У всех обычных микроконтроллеров есть АЦП, которое преобразовывает аналоговый сигнал в цифровой. Ну и есть цифровой вход/выход. 0 или 1, 0В или 5В. Вот функции для управления этим всем на AVR :
Цифр. выход: digitalWrite(пин, значение)
Цифр. вход: digitalRead(пин)
Аналоговый вход: analogRead(пин)
ШИМ: analogWrite(пин, значение от 0 до 255)
Скоро будет остальное. И проекты!

#начало
#уроки
👍2
Сначала расскажу про потенциометр. Это резистор, сопротивлением которого можно управлять. К ардуинке он подключается просто: одна крайняя нога на gnd, другая на 5в, а средняя на аналоговую ногу ардуины(А0, А1, А2 и т.д.). Прошивка для проверки этого всего тоже простая:
#define POT_PIN A0 // пин потенциометра
void setup() {
Serial.begin(9600); // настраиваем порт
pinMode(POT_PIN, 0); // настраиваем пин
}
void loop() {
// таймер на миллисе
static uint32_t tmr;
if(millis() - tmr >= 150) {
tmr = millis();
Serial.println(analogRead(POT_PIN)); // вывод в порт
}
}
Тут в порт выводятся числа от 0 до 1024, это значение с АЦП. Ещё можно открыть плоттер(ctrl+shif+l или через инструменты).
#начало
#уроки

П. С. Дополнение: в pinMode 0 можно поменять на INPUT, это то же самое
👍1
А теперь кнопки. Обычно у них 4 ноги, но они попарно соединены. Остаётся 2 контакта. Кнопку можно подключать по разному. Обычно одна нога идёт на пин, вторая на gnd или 5В. Если на 5В, то к пину надо подключить резистор(обычно на 10 или 4,7 кОм). Вот прошивка без библиотеки:
#define BTN 3  // кнопка на д3
void setup() {
Serial.begin(9600); // настройка порта
pinMode(BTN, 2); // настройка пина на подтяжку к +
}
void loop() {
static bool flg; // флаг состояния кнопки
bool s = !digitalRead(BTN); // текущее состояние кнопки
if (s && !flg) { // кнопка нажата
flg = true;
Serial.println("Click");
}
if (!s && flg) { // кнопка отпущена
flg = false;
Serial.println("Relase");
}
}

Это минимальная обработка нажатия, в которой нет антидребезга. Все не сенсорные кнопки дребезжат, т.е. нажатие происходит не сразу, т.е. на ардуину приходит много 0 и 1. Из-за этого будут ложные срабатывания. Потом пришлю прошивку с антидребезгом

#начало
#уроки
👍2
А сейчас датчики. Они бывают простыми и сложными. Простые выдают цифровой(0 и 1, 0В и 5В(3,3В)) или аналоговый. А сложные связываются с ардуиной с помощью интерфейсов(I2C, I2S, UART, SPI и т.д.). Простые датчики могут работать и без микроконтроллера.
У простых цифровых или только аналоговых датчиков три ноги — gnd(-, знак земли), out(a0 или d0) и 5v(3,3v, vcc, +). Out подключается к любой ноге если датчик цифровой и к аналоговой, если аналоговый. Ещё есть простые цифроаналоговые датчики, у них 4 ноги — gnd, 5v, d0(цифровой) и a0(аналоговый). Подключать и a0, и d0 не обязательно. Прошивку для простых датчиков присылать не буду. Для аналоговых подойдёт прошивка потенциометра, а для цифровых там же можно заменить analogRead на digitalRead.
А со сложными датчиками всё сложнее. Потом будем разбирать самые популярные.
А потом пришлю фотографии разных датчиков.

#начало
#железки
А ещё я ввожу новый хэштег #уроки
А теперь расскажу про светодиод. У него обычно 2 ноги, анод и катод, + и -. Для диодов нужен определённый ток. Если диод напрямую подключить к 5в, то он сгорит. Чтобы этого не произошло, используют резистор (обычно на 220ом). Программа для моргания диодом тут уже есть (см. урок про нанку). Так что вот прошивка для управления светодиодом с помощью кнопки:
#define BTN 3  // кнопка на д3
#define LED_PIN 2 // диод на д2
void setup() {
Serial.begin(9600); // настройка порта
pinMode(BTN, 2); // настройка пина на подтяжку к +
pinMode(LED_PIN, 1); // настройка пина диода на выход
}
void loop() {
static uint32_t tmr;
static bool flg; // флаг состояния кнопки
bool s = !digitalRead(BTN); // текущее состояние кнопки
if (s && !flg && millis() - tmr > 100) { // кнопка нажата
flg = true;
tmr = millis();
Serial.println("Click");
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
if (!s && flg && millis() - tmr > 100) { // кнопка отпущена
flg = false;
tmr = millis();
Serial.println("Relase");
}
}
Тут уже есть антидребезг
А сейчас пришлю схему подключения и как выглядят светодиоды

#начало
#уроки
👍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/объявление функции. Так код будет занимать меньше строчек.
А ещё в конце каждой строки(если она не пустая и не заканчивается { или } ) надо писать ;

#начало
#уроки
👍1😐11
А теперь коротко про циклы.
Иногда бывает надо сделать много ± одинаковых команд. Чтобы не писать каждую вручную, есть циклы. Они бывают 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 и вернётся новое значение

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

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

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

#уроки
#ардуиноиде
#начало
81