Möt Arduino Killer: ESP8266

Vad händer om jag sa till dig att det finns en Arduino-kompatibel dev-kort med inbyggd Wi-Fi för mindre än 10 dollar? Jo, det finns det.

Vad händer om jag sa till dig att det finns en Arduino-kompatibel dev-kort med inbyggd Wi-Fi för mindre än 10 dollar?  Jo, det finns det.
Annons

Wi-Fi är en viktig del av kit för alla Dot-projekt, men vår favorit Arduino kommer inte med Wi-Fi, och att lägga i en Wi-Fi-sköld kan ge den totala kostnaden till cirka $ 40. Vad händer om jag sa till dig att det finns en Arduino-kompatibel dev-kort med inbyggd Wi-Fi för mindre än 10 dollar? Jo, det finns det.

Möt Arduino Killer: ESP8266. Det var bara en fråga om tid innan kronan stulades från det glänsande huvudet på vår kära Arduino utvecklingsstyrelse. Är det möjligt att bli kär i ett kretskort?

Fångna namn åt sidan, ESP8266 (även känd som NodeMCU) marknadsfördes ursprungligen som en billig Wi-Fi-tillägg för Arduino-kort, tills hackergemenskapen insåg att du kunde klippa Arduino helt ur ekvationen.

På mindre än ett år har ESP8266 rackat i popularitet och är nu så välstödd och utvecklad att om du använder Arduino, måste du stå upp och notera dig. Köp en nu, följ sedan med den här guiden för att komma igång med programmering av din ESP8266 - allt från den bekanta Arduino IDE.

Du är inte begränsad till att använda Arduino IDE självklart - de är kompatibla med Lua också (som ser ut som en slankad Python till mina nybörjare), men eftersom vi tar itu med det här ur perspektivet för dem som har lärt oss på Arduino, det är vad vi ska täcka uteslutande idag.

Det finns ganska många modeller av ESP8266 runt nu, men jag ska gå vidare och rekommendera den här: ESP-12E (även känd som NodeMCU 1.0, eller det är nyaste syskon NodeMCU 2.0).

Det är lite dyrare än de andra ($ 6, 50 jämfört med $ 4!), Men innehåller den seriella drivrutinen som behövs för att programmera chipet, och har en inbyggd effektregulator, liksom massor av IO-stift. Den är brett stödd och behöver verkligen inget annat än en USB-anslutning för programmering eller ström, så det är lättast att arbeta med. Om du köper någon annan typ av ESP8266-kort kan du behöva en separat 3.3V strömregulator och en lämplig FTDI-anslutning för programmering.

Komma igång med ESP8266-12E och Arduino

Först installera seriella drivrutiner för det här kortet. Det kan hända att du måste inaktivera KEXT-signering om du kör El Capitan på grund av nya säkerhetssystem.

Därefter måste vi aktivera support för ESP8266 från Arduino IDEs styrelsechef. Öppna inställningar och ange följande webbadress där det står Ytterligare webbadresser för styrhanteraren :

 http://arduino.esp8266.com/package_esp8266com_index.json 

Arduino Board Manager URLS

Hit Ok, öppna sedan Boards Manager från Tools -> Board menyn, leta efter esp8266 och installera plattformen. Du borde nu se ett val för NodeMCU 1.0.

välj ombord

Lämna CPU och ladda upp hastighet som det är och välj din nyinstallerade seriella port. På Mac visas detta som cu.SLAB_USBtoUART .

Som ett första program skulle jag föreslå den enkla Wi-Fi-scannern - hitta den från Arkiv -> Exempel -> ESP8266WiFi -> WifiScan . Observera att det är ganska långsamt att ladda upp, men så småningom kommer det att säga "laddad uppladdning" och vid den tidpunkten (inte tidigare, eller du bryter upp uppladdningsprocessen) kan du öppna seriell bildskärm. Du borde se något liknande det här:

wifi-scanningstest esp8266
Framgång! Nu, låt oss försöka ansluta till en.

Här är en helt enkel barebones-kod för anslutning till ett Wi-Fi-nätverk. Det gör inget annat än att bara ansluta, men det är något du kan lägga till för senare. Kom bara ihåg att ändra YOUR_SSID och YOUR_PASSWORD till dina Wi-Fi-detaljer. Ladda upp, öppna seriekonsolen och du bör se den ansluta.

#include const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; WiFiClient wifiClient; void setup() { Serial.begin(115200); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { } 

Är det inte bra hur löjligt enkelt det var?

Innan vi fortsätter, här är pinout diagrammet - det kan komma till nytta senare. Observera att stiftnumren som avses i koden är GPIO-numren, inte D0-16 förmodligen skrivna på din styrplatta. Om du absolut inte kan få reda på varför en sensor inte fungerar, har du förmodligen blandat stiftnumren.

NodeMCU__v1.0_pinout

Snabb smart hemsensor med MQTT och DHT11

Här är ett praktiskt exempel som du kan använda omedelbart för att övervaka ditt hem. Vi lägger till en DHT11 temperatur- och fuktighetssensor och rapporterar sedan värdena med MQTT-protokollet via Wi-Fi-nätverket, i mitt fall till ett OpenHAB DIY hemautomatiseringssystem (om inte, kanske du vill läsa vår nybörjarguide till få OpenHAB igång med en Raspberry Pi Komma igång med OpenHAB Hemautomatisering på Raspberry Pi Komma igång med OpenHAB Hemautomatisering på Raspberry Pi OpenHAB är en mogen, öppen källkodsautomatiseringsplattform som körs på en mängd olika hårdvaror och är protokollets agnostiska, vilket betyder den kan anslutas till nästan vilken hemautomatiseringsutrustning som helst på marknaden idag. Läs mer och del 2, som specifikt handlar om att installera en MQTT-server. OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB, öppen källkodsautomatiseringsprogramvara, överstiger möjligheterna för andra hemautomatiseringssystem på marknaden - men det är inte lätt att få igång. Det kan faktiskt vara exakt frustrerande. Läs mer ).

Anslut DHT-givaren till GND, 3.3v och ~ D4 (eller GPIO 2) på ledningssidan. Det är allt vi behöver för nu.

Ladda ner dessa MQTT- och DHT-bibliotek. Även om du redan har dem, ladda ner dem ändå, säkerhetskopiera vad du har och skriv över med dem. Det senaste DHT11-biblioteket från Adafruit använder en automatisk algoritm för att bestämma hastigheten vid vilken data läses från sensorn, men det är buggy på ESP8266 och 90% av tiden resulterar i misslyckade avläsningar.

Med den gamla versionen 1.0 av biblioteket som jag har med i nedladdningen kan du manuellt byta timing: 11 fungerar bäst för dessa ESP2866-kort. Jag gick också igenom många kopior av MQTT-biblioteket och försökte hitta en bra återuppringningsfunktion, slutligen landa på den medföljande. Du måste starta om Arduino IDE efter att du har ersatt dessa.

Här är den fullständiga koden för projektet. Överst är alla variabler du behöver ändra, inklusive Wi-Fi-detaljer, MQTT-servern (en URL kan användas istället om du använder en molnserver, men det finns ingen autentisering på plats) och kanaler för att publicera data på.

Så här fungerar det och några anteckningar:

  • Först ansluter vi till Wi-Fi, sedan till MQTT-servern och startar sedan huvudslingan ().
  • I slingan pollar vi DHT-sensorn var 60: e sekund och publicerar avläsningar till relevanta MQTT-kanaler. Återigen, om du hittar de flesta av avläsningarna resulterar i ett felmeddelande, har du fel version av DHT-biblioteket - nedgraderar till v1.0.
  • client.loop () skickar kontroll till MQTT-biblioteket, så att det kan reagera på inkommande meddelanden.
  • Det finns en messageReceived () -funktion där vi hanterar inkommande meddelanden - gör bara ett enkelt om uttalande för att jämföra nyttolasten med det meddelande du förväntar dig. Du kan använda detta för att aktivera ett relä, till exempel.
  • Efter att ha kört dessa i några dagar fann jag att de slumpmässigt skulle sluta arbeta - jag antar att det här är någon form av minnesläckage, men med tanke på att jag inte har kodningsförmågan att hantera det och det kan vara med kärnbiblioteken, jag Jag har valt en enkel mjuk återställning varje dag. Exakt en dag efter det att sensorerna först aktiverats, kommer de att starta om sig själva.
  • När dessa billiga DHT11-moduler drivs från 3.3v är fuktighetsvärdena mycket lägre än de borde vara. Jag har löst detta med en enkel multiplikation och kalibrerad mot en kommersiell sensor. Jag rekommenderar dig att bekräfta mot din egen kända källa också innan du förlita dig på avläsningarna. Alternativt, driva dem med 5V - men du måste placera en 5v-3.3v logisk nivå växlare mellan datapinnen och ESP8266, eller du kommer att skada den .

Om allt gick bra borde du nu få sensoravläsningar i din MQTT-mäklare och kan fortsätta med att ansluta dessa till OpenHAB enligt detaljer i del 2 i vår nybörjarhandledning. OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB Beginner's Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB, open source-hemautomatiseringsprogrammet, överstiger möjligheterna för andra hemautomatiseringssystem på marknaden - men det är inte lätt att få igång. Faktum är att det kan vara rättvist frustrerande. Läs mer, där jag också visade dig hur man grafar data.

humditygraf från openhab

Farväl Arduino, vi älskade dig så. Bara skojar: inte överallt i mitt hus kan du även få Wi-Fi, så för de fläckarna behöver jag fortfarande ett nätverksnätverk med Arduino och RF-mottagare. Men vad ska du göra med ESP8266? Alla projekt som använder ESP8266 du vill se skrivna på MakeUseOf? Låt oss veta i kommentarerna!

In this article