Su Wi-Fi ir Bluetooth moduliu.

Ant Arduino Uno Viskam suteikiamas WiFi patogus veikimas su mikrovaldikliu: 14 skaitmeninių įėjimų/išėjimų (6 iš jų gali būti naudojami kaip PWM išėjimai), 6 analoginiai įėjimai, USB jungtis, maitinimo jungtis, programavimo grandinėje jungtis (ICSP) ir mikrovaldiklio atstatymo mygtukas.

Plokštės akcentas yra ESP8266 WiFi modulis, leidžiantis Arduino bendrauti su kitais moduliais per belaidžiai tinklai 802.11 b/g/n standartai.

ESP8266 leidžia suaktyvinti Arduino plokštę nenaudojant USB kabelio OTA (Firmware Over The Air) režimu.

Lentos vaizdo peržiūra

Ryšys ir sąranka

Norėdami pradėti nuo Arduino lenta Uno WiFi operacinėje Windows sistema atsisiųsti ir įdiegti Arduino integruota kūrimo aplinka – Arduino IDE.

Kažkas nutiko?

WiFi modulio konfigūravimas

„Arduino“ programinė įranga per „WiFi“.

„Arduino Uno WiFi“ turi dar vieną malonią premiją – galimybę įkelti eskizus nenaudojant USB laido OTA (Firmware Over The Air) režimu. Pažiūrėkime atidžiau, kaip tai padaryti.


Norėdami tai padaryti, įveskite meniu: Įrankiai Uostas ir pasirinkite tinkamą prievadą.

Kadangi mes mirksime „Arduino“ per „WiFi“, plokštė bus apibrėžta kaip nuotolinis įrenginys su IP adresu

Aplinka sukonfigūruota, plokštė prijungta. Galite tęsti eskizo atsisiuntimą. Arduino IDE yra didelis sąrašas paruošti pavyzdžiai, kuriame galite pamatyti bet kokios problemos sprendimą. Pasirinkime iš pavyzdžių LED mirksėjimą – eskizą „Blink“.
Paleiskite lentą spustelėdami programos atsisiuntimo piktogramą.
Po įkrovimo šviesos diodas pradės mirksėti kartą per sekundę. Tai reiškia, kad viskas pavyko.

Dabar galite eiti į naudojimo atvejai .

Naudojimo pavyzdžiai

Tinklapio serveris

Nustatykime paprastą žiniatinklio serverį, kuriame bus rodomas puslapis su dabartinėmis analoginių įėjimų reikšmėmis.

web-server.ino /* Paprasto žiniatinklio serverio, veikiančio Arduino Uno WiFi, pavyzdys. Serveris rodo analoginių įėjimų reikšmes ir atnaujina informaciją kas dvi sekundes. Prisijunkite prie serverio adresu http:// /arduino/webserver/ Atminkite, kad šis pavyzdys veikia tik su Arduino Uno WiFi Developer Edition. */#įtraukti #įtraukti void setup() ( Wifi.begin () ; Wifi.println ("Web serveris veikia") ; // Rodyti pranešimą apie serverio paleidimą „Wi-Fi“ konsolėje) void loop() ( while (Wifi.available () ) (procesas (Wifi) ; ) delay (50 ) ; ) void process (WifiData klientas) ( String command = client.readStringUntil ("/" ) ; if (command = = "žiniatinklio serveris" ) ( WebServer(klientas) ; ) ) void WebServer(WifiData klientas) ( client.println ("HTTP/1.1 200 OK") ; client.println ("Turinio tipas: tekstas/html") ; klientas. println ("Ryšys: uždaryti" ) ;client.println ("Atnaujinti: 2" ) ; // Pavadinimas, kuris nustato puslapio atnaujinimo laikotarpį sekundėmis client.println(); client.println(" " ) ; // Suformuokite puslapį client.println( " UNO WIFI žiniatinklio serveris " ) ; client.print( "

Vertybių išvesties iš analoginių kaiščių pavyzdys

"
) ; client.print("
    " ); for (int analogChannel = 0 ; analogChannel< 4 ; analogChannel++ ) { int sensorReading = analogRead(analogChannel) ; client.print ("
  • ant analoginio įvesties ") ; client.print(analoginis kanalas); client.print(": " ) ; client.print(sensorReading) ; client.print("
  • " ) ;) client.println("
" ); client.print(DELIMITER) ; // Nepamirškite uždaryti ryšio! }

Lentos elementai

Mikrovaldiklis ATmega328P

„Arduino Uno WiFi“ platformos širdis yra 8 bitų AVR mikrovaldiklis ATmega328P.

Mikrovaldiklis ATmega16U2

Mikrovaldiklis ATmega16U2 jungia ATmega328P mikrovaldiklį prie kompiuterio USB prievado. Prijungus prie kompiuterio, Arduino Uno WiFi apibrėžiamas kaip virtualus COM prievadas. 16U2 programinė įranga naudoja standartines USB-COM tvarkykles, todėl nereikia įdiegti jokių išorinių tvarkyklių.

Maitinimo kaiščiai

    VIN:Įtampa iš išorinio maitinimo šaltinio (nesusijusi su 5 V iš USB ar kitos stabilizuotos įtampos). Per šį išvestį galite tiekti išorinį maitinimą ir vartoti srovę, jei prie įrenginio prijungtas išorinis adapteris.

    5V: Iš plokštės stabilizatoriaus išėjimas gauna 5 V įtampą. Šis stabilizatorius tiekia maitinimą mikrovaldikliui ATmega328. Nerekomenduojama įrenginio maitinti per 5 V išvestį - tokiu atveju nenaudojamas įtampos stabilizatorius, dėl kurio gali sugesti plokštė.

    3,3 V: 3.3V nuo plokštės reguliatoriaus. Didžiausia išėjimo srovė yra 1 A.

    GND: Pagrindinės išvados.

    IOREF: Kaištis suteikia išplėtimo plokštėms informaciją apie mikrovaldiklio darbinę įtampą. Priklausomai nuo įtampos, išplėtimo plokštė gali persijungti į atitinkamą maitinimo šaltinį arba naudoti lygio keitiklius, kurie leis dirbti tiek su 5V, tiek su 3,3V įrenginiais.

I/O prievadai

    Skaitmeniniai įėjimai/išėjimai: kaiščiai 0-13
    Vieno loginis lygis yra 5 V, nulis yra 0 V. Didžiausia išėjimo srovė yra 40 mA. Ištraukimo rezistoriai yra prijungti prie kaiščių, kurie pagal nutylėjimą yra išjungti, bet gali būti įjungti programine įranga.

    PWM: 3, 5, 6, 9, 10 ir 11 kaiščiai
    Leidžia išvesti 8 bitų analogines reikšmes kaip PWM signalą.

    ADC: kaiščiai A0 - A5
    6 analoginiai įėjimai, kurių kiekvienas gali parodyti analoginę įtampą kaip 10 bitų skaičių (1024 reikšmės). ADC bitų gylis yra 10 bitų.

    TWI/I²C: SDA ir SCL kaiščiai
    Ryšiui su periferiniais įrenginiais naudojant sinchroninį protokolą, per 2 laidus. Norėdami dirbti - naudokite Wire biblioteką.

    SPI: kaiščiai 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).
    Per šiuos kaiščius ryšys vyksta per SPI sąsają. Norėdami dirbti - naudokite SPI biblioteką.

    UART: kaiščiai 0 (RX) ir 1 (TX)
    Šie kaiščiai yra prijungti prie atitinkamų mikrovaldiklio ATmega16U2 kaiščių, kurie veikia kaip USB-UART keitiklis. Naudojamas palaikyti ryšį su Arduino plokšte su kompiuteriu ar kitais įrenginiais per serijinę klasę.

LED indikacija

B tipo USB jungtis

B tipo USB jungtis skirta „Arduino Uno WiFi“ platformai mirkyti naudojant kompiuterį.

Jungtis išoriniam maitinimo šaltiniui

Jungtis prijungimui išorinis maitinimo šaltinis Nuo 7 V iki 12 V.

5V įtampos reguliatorius

Kai plokštė yra prijungta prie išorinio maitinimo šaltinio, įtampa praeina per MPM3610 reguliatorių. Stabilizatoriaus išėjimas yra prijungtas prie 5 V kaiščio. Didžiausia išėjimo srovė yra 1A.

3,3V įtampos reguliatorius

MPM3810GQB-33 stabilizatorius su 3,3 volto išėjimu. Tiekia maitinimą ESP8266 WiFi moduliui ir išvedamas į 3,3 V kaištį. Didžiausia išėjimo srovė yra 1A.

ICSP jungtis, skirta ATmega328P

ICSP jungtis skirta ATmega328P mikrovaldiklio programavimui grandinėje. Naudojant SPI biblioteką, šie kaiščiai gali susisiekti su išplėtimo plokštėmis per SPI sąsają. SPI linijos nukreipiamos į 6 kontaktų jungtį, taip pat yra dubliuojamos skaitmeniniuose kaiščiuose 10 (SS), 11 (MOSI), 12 (MISO) ir 13 (SCK).

ICSP jungtis, skirta ATmega16U2

ICSP jungtis skirta mikrovaldiklio ATmega16U2 programavimui grandinėje.

Taigi valdysime du reversinius (sukimosi į abi puses) variklius: pagrindinį ir vairavimo. Maitinsime juos iš 3,7 V baterijos, tačiau iš esmės galite tiekti iki 12 V, jei susitarsite dėl valdiklio maitinimo arba organizuosite jį su atskira baterija.

Galios skyriuje naudojame paprasčiausią miniatiūrinę tvarkyklę žingsninis variklis l9110s arba galite naudoti surinkimą L293 \ 8 arba bet kuris toks pat galingas, kurį galite rasti. Apskritai aš nupiešiau viską, kas yra paveikslėlyje.

Projekto komponentus galite nusipirkti „aliexpress“:

„WiFi“ valdiklis naudojo mano mėgstamiausią NodeMCU 0.9 ESP8266, bet taip pat galite naudoti mažesnio dydžio WeMos D1 mini.

Baterija gali būti įkraunama per mikro USB, po to tiesiogiai maitina variklio tvarkyklę ir per WiFi valdiklį padidinkite keitiklį iki 5 V.

Programos kodas:

#įtraukti
const char* ssid = "jūsų wifi tinklo pavadinimas";
const char* slaptažodis = "jūsų tinklo slaptažodis";
int up = 2; //diskrečių išėjimų skaičius
int žemyn = 14;
int left = 4;
int dešinėje = ​​12;
// Sukurkite serverio egzempliorių
// nurodykite prievadą, kurio norite klausytis kaip argumentą
„WiFiServer“ serveris (80);
negalioja sąranka()(
Serial.begin(9600);
delsimas(10);
//paruošti išvestis
pinMode(aukštyn, OUTPUT);
skaitmeninisWrite(aukštyn, 0);
pinMode(žemyn, OUTPUT);
skaitmeninisWrite(žemyn, 0);
pinMode(kairėje, OUTPUT);
skaitmeninisWrite(kairėn, 0);
pinMode(dešinėn, IŠVESTIS);
skaitmeninisWrite(dešinėje, 0);

// Prisijunkite prie WiFi tinklo
Serial.println();
Serial.println();
Serial.print("Prisijungimas prie ");
Serial println(ssid);

wifi.begin(ssid, slaptažodis);

Nors (WiFi.status() != WL_CONNECTED) (
delsimas (500);
Serial.print(".");
}
Serial.println("");
Serial.println ("Wi-Fi prijungtas");

//Paleiskite serverį
serveris.begin();
Serial.println("Serveris paleistas");
//rodo IP adresą prievado monitoriuje
Serial.println(WiFi.localIP());
}
void loop() (
// patikrinkite, ar klientas yra prijungtas
WiFiClient klientas = server.available();
jei (!klientas) (
grąžinti;
}

//Laukiame, kol klientas atsiųs kai kuriuos duomenis
Serial.println("naujas klientas");
while(!client.available())(
delsimas(1);
}

//Perskaitykite pirmąją užklausos eilutę
String req = client.readStringUntil("\r");
Serial println(req);
client.flush();

//komandų apdorojimas
if (req.indexOf("/gpio/up") != -1)(
skaitmeninisWrite(up, 1);
skaitmeninisWrite(žemyn, 0);
delsimas (1000);
skaitmeninisWrite(aukštyn, 0);
skaitmeninisWrite(žemyn, 0);
}
else if (req.indexOf("/gpio/down") != -1)(
skaitmeninisWrite(aukštyn, 0);
skaitmeninisRašyti(žemyn, 1);
delsimas (1000);
skaitmeninisWrite(aukštyn, 0);
skaitmeninisWrite(žemyn, 0);
}
else if (req.indexOf("/gpio/left") != -1)(
skaitmeninisWrite(up, 1);
skaitmeninisWrite(žemyn, 0);
skaitmeninisWrite(kairėje, 1);
skaitmeninisWrite(dešinėje, 0);
delsimas (1000);
skaitmeninisWrite(aukštyn, 0);
skaitmeninisWrite(žemyn, 0);
skaitmeninisWrite(kairėn, 0);
skaitmeninisWrite(dešinėje, 0);
}
else if (req.indexOf("/gpio/right") != -1)(
skaitmeninisWrite(up, 1);
skaitmeninisWrite(žemyn, 0);
skaitmeninisWrite(kairėn, 0);
digitalWrite(dešinėje, 1);
delsimas (1000);
skaitmeninisWrite(aukštyn, 0);
skaitmeninisWrite(žemyn, 0);
skaitmeninisWrite(kairėn, 0);
skaitmeninisWrite(dešinėje, 0);
}
Kitas(
Serial.println("netinkama užklausa");
}

Client.flush();
// pasiruošti atsakymui
String s = "HTTP/1.1 200 OK\r\nTurinio tipas: text/html\r\n\r\n\r\n \r\n";

S+="


AUKŠTYN.
";
s+="
KAIRĖ    “;
s += "TEISINGAI
";
s+="
ŽEMYN";
s+="
\n";
// Siųsti atsakymą klientui
client.print(s);
delsimas(1);
Serial.println("Klientas atjungtas");
) Programa parašyta Arduino IDE. Kaip nustatyti Arduino IDE dirbti su NodeMCU 0.9 ESP8266 valdikliu pažiūrėk nuorodą. Atsisiuntus programą į valdiklį, prievado monitorius gali nuskaityti IP adresą, kurį plokštė gaus prisijungusi prie jūsų WiFi maršrutizatoriaus. Kompiuterio naršyklėje jums reikia adreso juostaįveskite šį adresą ir eikite į puslapį, kurį sugeneruos valdiklio programa. Tai atrodys taip:

ŽEMYN

Paspaudus nuorodą AUKŠTYN, automobilis pajudės 1 sekundę į priekį ir sustos. Kai paspausite DOWN, automobilis 1 sekundę pajudės atgal. KAIRĖ – posūkio variklis suks ratus į kairę ir automobilis važiuos 1 sekundę į kairę. Tas pats vyksta į dešinę, kai paspausite RIGHT.

Visa ši sistema veiks tik su sukonfigūruotu WiFi prieigos tašku (WiFi maršruto parinktuvu), bet ateityje man bus įdomu žaisti valdiklis NodeMCU 0.9 ESP8266, kuris pats suorganizuos prieigos tašką ir veiks kaip WEB serveris, tai yra, kai prie jo IP prisijungsite iš naršyklės, pamatysime tinklalapį su valdikliais. Taip pat įdomu organizuoti duomenų perdavimą iš vieno tokio valdiklio į kitą per jų autonominį WiFi tinklą.

1 dalis: ESP8266 paruošimas

Kodėl šis straipsnis? Jau yra nemažai straipsnių apie Habré apie ESP naudojimą įvairiose konfigūracijose, bet kažkodėl be detalių, kaip tiksliai viskas sujungta, mirksi ir programuojama. „Paėmiau ESP, dvi AA baterijas, DHT22, įmečiau į dėžę, papurčiau laikrodį ir termometras paruoštas! Dėl to pasirodo keista: jau dirbantys su ESP nemato nieko neįprasto tame, ką padarė, o norintys mokytis nesupranta, nuo ko pradėti. Todėl nusprendžiau parašyti išsamų straipsnį apie tai, kaip ESP prijungiamas ir mirksi, kaip jį sujungti su Arduino ir išoriniu pasauliu ir su kokiomis problemomis susidūriau kelyje. Pateikiu nuorodas į Aliexpress tik kainų eilės pateikimui ir išvaizda komponentai.

Taigi, turėjau du mikrovaldiklius, septynis skirtingus jutiklius, penkis maitinimo šaltinius, DHT22 temperatūros jutiklį ir visą galybę įvairiausių ir spalvų laidų, taip pat begalę rezistorių, kondensatorių ir diodų. Ne todėl, kad viso to reikia termometrui, bet įsukus į mikroelektroniką, sustoti tampa sunku.


Maistas

ESP8266 reikalinga 3,3 V įtampa ir mažiausiai 300 mA srovė. Deja, Arduino Uno nesugeba suteikti tokios srovės, kaip ir USB-UART adapteriai (programuotojai), tokie kaip FT232RL – jų riba yra apie 50mA. Tai reiškia, kad turėsite organizuoti atskirą maitinimą. Ir būtų geriau, jei „Arduino“ dirbtų ir nuo 3,3 V, kad būtų išvengta tokių problemų kaip „Į ESP modulio RX kaištį įjungiau penkių voltų signalą, kodėl jis kvepia perdegusiu plastiku?“.

Yra trys sprendimai.

2. Įsigykite paruoštą modulį su įtampos reguliatoriumi, kuris sumažina nuo 5 V iki 3,3 V. Galbūt tai yra patogiausias pasirinkimas.

3. Pats surinkite modulį iš AMS1117 reguliatoriaus ir vieno 22uF tantalo kondensatoriaus.

Pasirinkau trečią variantą, nes dažnai reikia 3,3 V, esu godus ir mėgstu reguliatorius statyti tiesiai į maitinimo šaltinius.

Su AMS1117 viskas paprasta: jei dedate su tekstu aukštyn, tai kojelių įtampa didėja iš kairės į dešinę: 0 (Gnd), 3.3V (Vout), 5V (Vin).
Tarp nulio ir išvesties reikia 22 mikrofaradų tantalo kondensatoriaus (taigi pagal instrukcijas, kas bus, jei įdėsite elektrolitinį - netikrinau). Tantalo SMD kondensatorius turi pliusą, kur yra juostelė. Šiek tiek siaubingo SMD komponentų litavimo, visiškai neskirto tokiam barbariškumui ir:

Būtinai patikrinkite išėjimo įtampa. Jei jis yra žymiai mažesnis nei 3,3 V (pvz., 1,17 V) - po litavimo leiskite reguliatoriui atvėsti ir patikrinkite kontaktus. Jei įdėsite didesnį nei 22uF kondensatorių, multimetras gali rodyti didesnę įtampą.

Kodėl AMS1117? Jis plačiai naudojamas. Jį galite rasti beveik visur, net „Arduino Uno“ paprastai kainuoja AMS1117-5,0.
Jei žinote ką nors panašaus pagal dydį ir kainą, dar lengviau naudojamą - rašykite.

Svarbus momentas. Nežinau kodėl, bet AMS1117 yra labai kaprizingas dėl ryšių kokybės. Kontaktai turi būti patikimi. Geriau lituoti. Priešingu atveju jis gamina 3,3 V bandymų metu, bet nieko negamina esant apkrovai.

ESP8266 prijungimas

Pasirinkau 07 modelį, nes jis turi puikų metalinį skydą, kuris veikia kaip apsauga nuo trukdžių, mechaninių poveikių ir kaip radiatorius. Pastarasis suteikia skirtumą tarp perdegusio ir tiesiog įkaitinto modulio. Be to, yra išorinės antenos lizdas.

Kad lustas įsijungtų, turite prijungti VCC ir CH_P per 10 kΩ rezistorių. Jei taip nėra, tiks bet kuris 1–20 kΩ diapazonas. Be to, konkrečiai 07 modelyje vis dar reikalaujama, kad GPIO15 (arčiausiai GND esantis) būtų "ant žemės" (to paveikslėlyje nesimato, nes jungtis yra kitoje pusėje).

Dabar paimame USB-UART adapterį, perjungiame jį į 3.3V ir RX prijungiame prie TX, TX prie RX ir GND prie žemės (turiu nestabilų perdavimą be šito). Jei negalite perjungti į 3,3 V, galite naudoti paprasčiausią rezistoriaus įtampos daliklį: prijunkite ESP RX prie TX adapterio per 1 kΩ varžą, o ESP RX - prie žemės per 2 kΩ. Yra daug sudėtingesnių ir patikimesnių būdų prijungti 3,3 V ir 5 V, tačiau šiuo atveju tai tiks.

Ir jungiamės 9600 greičiu norimame COM prievade (jį galite pamatyti įrenginių tvarkyklėje).

Aš naudoju SecureCRT, Putty taip pat gerai, o Linux mylėtojai jau žino, ką daryti ir kur ieškoti.

(AT+RST iš naujo nustato lustą)

Jei nieko neįvyksta - išjunkite - įjunkite maitinimą, jei vis tiek nieko neįvyksta - patikrinkite TX / RX atitiktį, pabandykite juos pertvarkyti arba prilituoti prie lusto.

Kartais lustas užšąla juokingų eksperimentų metu ir tada jį reikia atjungti, įskaitant adapterio išjungimą (pavyzdžiui, ištraukus jį iš USB), nes net ir gaunamų energijos trupinių pakanka, kad lustas atkakliai atbuktų ir neveikia.

Kartais gudrybės su adapteriu pakabina USB prievadą. Kaip laikiną sprendimą galima naudoti kitą USB prievadą, tačiau apskritai geriau kompiuterį paleisti iš naujo.

Kartais tai pakeičia COM prievado numerį. Linux sistemoje tai galima išspręsti naudojant udev.

Jei vietoj teksto atsiranda šiukšlių, patikrinkite greičio nustatymus. Kai kurie senesni lustai veikia 115200.

Pradžioje lustas įkaista, bet jei jis tikrai karštas ir toliau kaista, atjunkite ir patikrinkite visas jungtis. Kad +3,3V nepatektų į korpusą, kad 5V į jį visai neateitų, kad adapterio "žemė" būtų prijungta prie lusto "žemės". Modelius su metaliniu ekranu labai sunku sudeginti (bet nieko neįmanomo), o modeliais be ekranų jie skundžiasi, sako, net ir maža klaida gali būti paskutinė lusto gyvenime. Bet aš šito netikrinau.

Firmware

Mano pasirinkimas yra NodeMCU. Ji turi problemų dėl atminties ir aparatinės įrangos palaikymo, tačiau tai daug kartų pasiteisina dėl kodo paprastumo ir lengvo derinimo.

Jums taip pat reikės NodeMCU flasher ir LuaLoader (pastarasis yra neprivalomas, yra ir kitų klientų, galinčių dirbti su šia programine įranga).

Išjunkite lustą. Prijunkite GPIO0 prie žemės ir įjunkite lustą:

Jei nieko neįvyksta ir AP MAC/STA MAC laukai tušti – dar kartą patikrinkite, ar GPIO0 yra ant žemės.
Jei programinė įranga įsijungė, bet pakibo - pažiūrėkite į žurnalo skirtuką, kažkodėl šis lustas atsisakė blykstelėti FT232RL, bet PL2303HX jis be jokių problemų buvo paleidžiamas 576000 greičiu. reikia atidaryti plastiką korpusą ir lituokite laidą nuo 5V iki 3,3V, yra variantų su penkiais išėjimais: 3.3, 5, TX, RX, Gnd.


Atkreipkite dėmesį: STA MAC pasikeitė. Įtariu, kad blykstė neteisingai parodė, bet reikia patikrinti.

Norėdami sutaupyti jėgų ir nervų, galite pasiimti gatavą arba pusgaminį.

Yra vienkartiniai adapteriai su patogiu laidu.
Yra