С Wi-Fi и Bluetooth модул.

На Ардуино УноОсигурен WiFi за всичко удобна работас микроконтролер: 14 цифрови входа/изхода (6 от тях могат да се използват като PWM изходи), 6 аналогови входа, USB конектор, конектор за захранване, конектор за програмиране в схемата (ICSP) и бутон за нулиране на микроконтролера.

Акцентът на платката е модулът ESP8266 WiFi, който позволява на Arduino да комуникира с други модули чрез безжични мрежи 802.11 b/g/n стандарти.

ESP8266 ви позволява да флашнете платка Arduino, без да използвате USB кабел в режим OTA (Firmware Over The Air).

Видео преглед на таблото

Свързване и настройка

За да започнете с Ардуино платка Uno WiFi в операционната зала Windows система изтеглете и инсталирайте Arduino интегрирана среда за разработка - Arduino IDE.

Нещо се обърка?

Конфигуриране на WiFi модула

Фърмуер на Arduino през WiFi

Arduino Uno WiFi има още един приятен бонус в състава си - възможността за качване на скици без използване на USB кабел в режим OTA (Firmware Over The Air). Нека да разгледаме по-отблизо как да направите това.


За да направите това, влезте в менюто: Инструменти Порт и изберете правилния порт.

Тъй като флашваме Arduino през WiFi, платката ще бъде дефинирана като отдалечено устройствос IP адрес

Средата е конфигурирана, платката е свързана. Можете да продължите с изтеглянето на скицата. Arduino IDE съдържа голям списък готови примери, в който можете да надникнете решението на всеки проблем. Нека изберем сред примерите мигането на светодиода - скицата "Blink".
Флаширайте дъската, като щракнете върху иконата за изтегляне на програмата.
След зареждане светодиодът ще започне да мига веднъж в секунда. Това означава, че всичко се получи.

Сега можете да отидете на случаи на употреба .

Примери за използване

уеб сървър

Нека настроим прост уеб сървър, който ще показва страница с текущите стойности на аналоговите входове.

уеб-сървър.ino /* Пример за прост уеб сървър, работещ на Arduino Uno WiFi. Сървърът показва стойностите на аналоговите входове и актуализира информацията на всеки две секунди. Достъп до сървъра на http:// /arduino/webserver/ Имайте предвид, че този пример работи само с Arduino Uno WiFi Developer Edition. */#включи #включи void setup() ( Wifi.begin () ; Wifi.println ("Уеб сървърът работи" ) ; // Показване на съобщение за стартиране на сървъра в wifi-конзолата) void loop() ( while (Wifi.available () ) ( process(Wifi) ; ) delay(50 ) ; ) void process(WifiData client) ( String command = client.readStringUntil ("/" ) ; if (command = = "webserver" ) ( WebServer(client) ; ) ) void WebServer(WifiData client) ( client.println ("HTTP/1.1 200 OK" ) ; client.println ("Content-Type: text/html" ) ; client. println ("Връзка: затваряне" ) ;client.println ("Опресняване: 2" ) ; // Заглавие, което задава периода на опресняване на страницата в секунди client.println(); client.println(" " ) ; // Формиране на страницата client.println( " UNO WIFI уеб сървър " ) ; client.print( "

Пример за извеждане на стойности от аналогови изводи

"
) ; client.print("
    "); за (int analogChannel = 0; analogChannel< 4 ; analogChannel++ ) { int sensorReading = analogRead(analogChannel) ; client.print ("
  • на аналогов вход ") ; client.print(analogChannel); client.print(": " ) ; client.print(sensorReading) ; client.print("
  • " ) ; ) client.println("
" ); client.print(DELIMITER) ; // Не забравяйте да затворите връзката! }

Бордови елементи

Микроконтролер ATmega328P

Сърцето на платформата Arduino Uno WiFi е 8-битовият AVR микроконтролер, ATmega328P.

Микроконтролер ATmega16U2

Микроконтролерът ATmega16U2 свързва микроконтролера ATmega328P към USB порта на компютъра. Когато е свързан към компютър, Arduino Uno WiFi се дефинира като виртуален COM порт. Фърмуерът 16U2 използва стандартни USB-COM драйвери, така че не е необходимо да се инсталират външни драйвери.

Захранващи щифтове

    VIN:Напрежение от външно захранване (без връзка с 5V от USB или друго стабилизирано напрежение). Чрез този изход можете както да доставяте външно захранване, така и да консумирате ток, ако към устройството е свързан външен адаптер.

    5V:Изходът получава напрежение от 5 V от стабилизатора на платката. Този стабилизатор осигурява захранване на микроконтролера ATmega328. Не се препоръчва захранването на устройството през изхода 5V - в този случай не се използва стабилизатор на напрежението, което може да доведе до повреда на платката.

    3,3 V: 3.3V от регулатор на платката. Максималният изходен ток е 1 A.

    GND:Основни заключения.

    IOREF:Пинът предоставя на разширителните платки информация за работното напрежение на микроконтролера. В зависимост от напрежението, разширителната платка може да превключи към подходящо захранване или да използва преобразуватели на нива, което ще й позволи да работи както с 5V, така и с 3.3V устройства.

I/O портове

    Цифрови входове/изходи:щифтове 0 - 13
    Логическото ниво на единица е 5 V, нула е 0 V. Максималният изходен ток е 40 mA. Издърпващите резистори са свързани към щифтовете, които са деактивирани по подразбиране, но могат да бъдат активирани от софтуера.

    ШИМ:щифтове 3, 5, 6, 9, 10 и 11
    Позволява ви да извеждате 8-битови аналогови стойности като PWM сигнал.

    ADC:щифтове A0 - A5
    6 аналогови входа, всеки от които може да представи аналоговото напрежение като 10-битово число (1024 стойности). Битовата дълбочина на ADC е 10 бита.

    TWI/I²C: SDA и SCL щифтове
    За комуникация с периферни устройства чрез синхронен протокол, чрез 2 проводника. За да работите - използвайте библиотеката Wire.

    SPI:щифтове 10(SS), 11(MOSI), 12(MISO), 13(SCK).
    Чрез тези изводи се осъществява комуникация през SPI интерфейса. За да работите - използвайте библиотеката SPI.

    UART:щифтове 0(RX) и 1(TX)
    Тези щифтове са свързани към съответните щифтове на микроконтролера ATmega16U2, който действа като USB-UART конвертор. Използва се за комуникация на платката Arduino с компютър или други устройства чрез серийния клас.

LED индикация

USB Type-B конектор

USB Type-B конекторът е предназначен за флашване на WiFi платформата Arduino Uno с помощта на компютър.

Конектор за външно захранване

Конектор за свързване външно захранване 7 V до 12 V.

5V регулатор на напрежение

Когато платката е свързана към външно захранване, напрежението преминава през регулатора MPM3610. Изходът на стабилизатора е свързан към 5V щифт. Максималният изходен ток е 1А.

Регулатор на напрежение 3.3V

Стабилизатор MPM3810GQB-33 с изход 3,3 волта. Осигурява захранване на WiFi модула ESP8266 и се извежда към 3.3V пин. Максималният изходен ток е 1А.

ICSP конектор за ATmega328P

Конекторът ICSP е предназначен за вътрешносхемно програмиране на микроконтролера ATmega328P. Използвайки SPI библиотеката, тези щифтове могат да комуникират с разширителни платки чрез SPI интерфейса. SPI линиите се насочват към 6-пинов конектор и също се дублират на цифрови щифтове 10(SS), 11(MOSI), 12(MISO) и 13(SCK).

ICSP конектор за ATmega16U2

Конекторът ICSP е предназначен за вътрешносхемно програмиране на микроконтролера ATmega16U2.

Така че ще управляваме два реверсивни (въртене в двете посоки) двигателя: главния и кормилния. Ние ще ги захранваме от 3,7 V батерия, но можете да подадете до 12 V по принцип, ако се съгласите на захранването на контролера или го организирате с отделна батерия.

В секцията за захранване използваме най-простия миниатюрен драйвер стъпков мотор l9110s или можете да използвате монтажа на L293 \ 8 или който и да е също толкова мощен, който можете да намерите. Като цяло нарисувах всичко на снимката.

Можете да закупите компоненти за проекта на aliexpress:

WiFi контролер използва любимия ми NodeMCU 0.9 ESP8266, но можете да използвате и по-малък размер WeMos D1 мини.

Батерията може да се зарежда чрез микро USB, след което захранва директно драйвера на двигателя и WiFi контролера чрез усилващ преобразувател до 5 V.

Програмен код:

#включи
const char* ssid = "име на вашата wifi мрежа";
const char* password = "вашата мрежова парола";
int up = 2; //брой дискретни изходи
int down = 14;
int ляво = 4;
int right = 12;
// Създаване на екземпляр на сървъра
// посочете порта за слушане като аргумент
WiFiServer сървър(80);
void setup()(
Serial.begin(9600);
забавяне (10);
//подгответе изходи
pinMode(нагоре, ИЗХОД);
digitalWrite(нагоре, 0);
pinMode(надолу, ИЗХОД);
digitalWrite(надолу, 0);
pinMode(вляво, ИЗХОД);
digitalWrite(отляво, 0);
pinMode(дясно, ИЗХОД);
digitalWrite(дясно, 0);

// Свързване към WiFi мрежа
Serial.println();
Serial.println();
Serial.print("Свързване към ");
Сериен println(ssid);

wifi.begin(ssid, парола);

Докато (WiFi.status() != WL_CONNECTED) (
забавяне (500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi свързан");

//Стартирайте сървъра
server.begin();
Serial.println("Сървърът стартира");
// показване на IP адреса в монитора на порта
Serial.println(WiFi.localIP());
}
void loop() (
// проверка дали клиентът е свързан
WiFiClient клиент = server.available();
ако (!клиент) (
връщане;
}

//Изчакваме, докато клиентът изпрати някои данни
Serial.println("нов клиент");
докато (!client.available())(
забавяне (1);
}

//Прочетете първия ред от заявката
String req = client.readStringUntil("\r");
Сериен println(req);
client.flush();

//обработка на команда
if (req.indexOf("/gpio/up") != -1)(
digitalWrite(нагоре, 1);
digitalWrite(надолу, 0);
забавяне (1000);
digitalWrite(нагоре, 0);
digitalWrite(надолу, 0);
}
else if (req.indexOf("/gpio/down") != -1)(
digitalWrite(нагоре, 0);
digitalWrite(надолу, 1);
забавяне (1000);
digitalWrite(нагоре, 0);
digitalWrite(надолу, 0);
}
иначе ако (req.indexOf("/gpio/left") != -1)(
digitalWrite(нагоре, 1);
digitalWrite(надолу, 0);
digitalWrite(отляво, 1);
digitalWrite(дясно, 0);
забавяне (1000);
digitalWrite(нагоре, 0);
digitalWrite(надолу, 0);
digitalWrite(отляво, 0);
digitalWrite(дясно, 0);
}
иначе ако (req.indexOf("/gpio/right") != -1)(
digitalWrite(нагоре, 1);
digitalWrite(надолу, 0);
digitalWrite(отляво, 0);
digitalWrite(дясно, 1);
забавяне (1000);
digitalWrite(нагоре, 0);
digitalWrite(надолу, 0);
digitalWrite(отляво, 0);
digitalWrite(дясно, 0);
}
иначе(
Serial.println("невалидна заявка");
}

Client.flush();
// подготовка за отговор
Низ s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n\r\n \r\n";

S+="


U.P.
";
s+="
НАЛЯВО ";
s += "НАДЯСНО
";
s+="
НАДОЛУ";
s+="
\н";
// Изпращане на отговора на клиента
client.print(s);
забавяне (1);
Serial.println("Клиентът е прекъснат");
) Програмата е написана в Arduino IDE. Как да настроите Arduino IDE да работи с NodeMCU 0.9 ESP8266 контролервиж линка. След като изтеглите програмата на контролера, порт мониторът може да прочете IP адреса, който платката ще получи след свързване към вашия WiFi рутер. В компютърен браузър трябва адресна лентавъведете този адрес и отидете на страницата, която програмата на контролера ще генерира. Ще изглежда така:

НАДОЛУ

Когато щракнете върху връзката НАГОРЕ, колата ще се придвижи напред за 1 секунда и ще спре. Когато натиснете НАДОЛУ, колата ще се върне назад за 1 секунда. НАЛЯВО - моторът за завъртане ще завърти колелата наляво и колата ще кара 1 секунда наляво. Същото важи и вдясно, когато натиснете НАДЯСНО.

Цялата тази система ще работи само с конфигурирана WiFi точка за достъп (WiFi рутер), но в бъдеще ми е интересно да си поиграя с контролер NodeMCU 0.9 ESP8266, който сам ще организира точка за достъп и ще действа като WEB сървър, тоест, когато получите достъп до неговото IP от браузър, ще видим уеб страница с контроли. Също така е интересно да се организира прехвърлянето на данни от един такъв контролер към друг чрез тяхната автономна WiFi мрежа.

Част 1: Подготовка на ESP8266

Защо тази статия? В Habré вече има редица статии за използването на ESP в различни конфигурации, но по някаква причина без подробности как точно всичко се свързва, флашва и програмира. Като „Взех ESP, две АА батерии, DHT22, хвърлих го в кутията, разклатих часовника и термометърът е готов!“. В резултат на това се оказва странно: тези, които вече работят с ESP, не виждат нищо необичайно в това, което са направили, а тези, които искат да се научат, не разбират откъде да започнат. Затова реших да напиша подробна статия за това как ESP е свързан и мига, как да го свържа с Arduino и външния свят и какви проблеми срещнах по пътя. Предоставям връзки към Aliexpress само за представяне на реда на цените и външен видкомпоненти.

И така, имах два микроконтролера, седем различни сензора, пет захранващи устройства, температурен сензор DHT22 и цял набор от проводници от всякакъв вид и цвят, както и безброй резистори, кондензатори и диоди. Не че всичко това е необходимо за един термометър, но веднъж навлезеш ли в микроелектрониката, става трудно да спреш.


Храна

ESP8266 изисква напрежение от 3,3 V и ток от поне 300 mA. За съжаление Arduino Uno не е в състояние да осигури такъв ток, както не могат да го осигурят USB-UART адаптери (програматори) като FT232RL - ограничението им е около 50mA. Това означава, че ще трябва да организирате отделно хранене. И би било по-добре Arduino да работи и от 3.3V, за да се избегнат проблеми като "Подадох петволтов сигнал към RX щифта на ESP модула, защо мирише на изгоряла пластмаса?".

Има три решения.

2. Купете готов модул с регулатор на напрежението, който намалява 5V до 3.3V. Може би това е най-удобният вариант.

3. Сглобете сами модула от регулатора AMS1117 и един танталов кондензатор 22uF.

Избрах третия вариант, защото често ми трябват 3.3V, алчен съм и обичам да вграждам регулатори направо в захранванията.

С AMS1117 всичко е просто: ако го поставите с текста нагоре, тогава напрежението на краката се увеличава отляво надясно: 0 (Gnd), 3.3V (Vout), 5V (Vin).
Между нулата и изхода ти трябва танталов кондензатор 22 микрофарада (така че по инструкция какво ще стане ако сложиш електролитен - не съм го проверявал). Танталов SMD кондензатор има плюс там, където е лентата. Малко чудовищно запояване на SMD компоненти, напълно не предназначени за такова варварство и:

Не пропускайте да проверите изходно напрежение. Ако е значително по-малко от 3,3 V (например 1,17 V) - оставете регулатора да се охлади след запояване и проверете контактите. Ако поставите кондензатор по-голям от 22uF, тогава мултиметърът може да покаже по-високо напрежение.

Защо AMS1117? Има широко приложение. Можете да го намерите почти навсякъде, дори Arduino Uno обикновено струва AMS1117-5.0.
Ако знаете нещо подобно като размери и цена, още по-лесно за използване - пишете.

Важен момент. Не знам защо, но AMS1117 е изключително капризен по отношение на качеството на връзките. Контактите трябва да са надеждни. По-добре запоени. Иначе на тестове вади 3.3V, но под товар не вади нищо.

Свързване на ESP8266

Избрах модел 07, защото има страхотен метален щит, който работи като защита срещу смущения, механични въздействия и като радиатор. Последното осигурява разликата между изгорял модул и просто нагрят. Освен това има гнездо за външна антена.

За да започне чипът, трябва да свържете VCC и CH_P през резистор 10kΩ. Ако това не е така, тогава всеки от диапазона 1-20kΩ ще свърши работа. В допълнение, конкретно модел 07 все още изисква GPIO15 (този, който е най-близо до GND) да е "на земята" (това не се вижда на снимката, защото връзката е от другата страна).

Сега вземаме USB-UART адаптера, превключваме го на 3.3V и свързваме RX към TX, TX към RX и GND към земята (имам нестабилно предаване без това). Ако не можете да превключите на 3,3 V, тогава можете да използвате най-простия резисторен делител на напрежение: свържете ESP RX към TX адаптера чрез съпротивление от 1 kΩ, а ESP RX към маса през 2 kΩ. Има много по-сложни и по-надеждни начини за свързване на 3.3V и 5V, но в този случай ще свърши работа.

И се свързваме със скорост 9600 на желания COM порт (можете да го видите в диспечера на устройствата).

Използвам SecureCRT, Putty също е добре, а любителите на Linux вече знаят какво да правят и къде да търсят.

(AT+RST нулира чипа)

Ако нищо не се случи - изключете - включете захранването, ако все още нищо не се случи - проверете кореспонденцията на TX / RX, опитайте да ги пренаредите или да ги запоите към чипа.

Понякога чипът замръзва по време на подигравателни експерименти и тогава трябва да се изключи захранването, включително чрез изключване на адаптера (например чрез издърпване от USB), тъй като дори входящите трохи от захранването са достатъчни, за да може чипът упорито да затъпява и не работа.

Понякога трикове с адаптер затварят USB порт. Възможно е да използвате друг USB порт като временно решение, но като цяло е по-добре да рестартирате компютъра.

Понякога това променя номера на COM порта. Под Linux това може да се реши с udev.

Ако вместо текст идва боклук, проверете настройките за скорост. Някои по-стари чипове работят на 115200.

В началото чипът загрява, но ако е много горещ и продължава да загрява, изключете и проверете всички връзки. Така че +3.3V да не стига до корпуса, така че 5V изобщо да не стига до него, така че "масата" на адаптера да е свързана към "масата" на чипа. Моделите с метален екран са много трудни за изгаряне (но нищо не е невъзможно) и се оплакват от модели без екрани, казват, че дори малка грешка може да бъде последната в живота на чипа. Но не проверих това.

фърмуер

Моят избор е NodeMCU. Тя има проблеми с паметта и хардуерната поддръжка, но това се отплаща многократно с простотата на кода и лекотата на отстраняване на грешки.

Ще ви трябват и флашър NodeMCU и LuaLoader (последният не е задължителен, има и други клиенти за работа с този фърмуер).

Изключете чипа. Свържете GPIO0 към земята и включете чипа:

Ако нищо не се случи и полетата AP MAC/STA MAC са празни - проверете отново дали GPIO0 е на земята.
Ако фърмуерът стартира, но увисна - погледнете в раздела Log, по някаква причина този конкретен чип отказа да бъде флашнат на FT232RL, но беше флашнат на PL2303HX със скорост 576000 без никакви проблеми, трябва да отворите пластмасата кутия и запояване на проводника от 5V до 3.3V, има опции с пет изхода: 3.3, 5, TX, RX, Gnd.


Моля, обърнете внимание: STA MAC е променен. Подозирам, че флашерът не го е показал правилно, но е необходима проверка.

За да спестите сила и нерви, можете да вземете готов или полуготов вариант.

Има адаптери за еднократна употреба с удобно окабеляване.
Има