Maak kennis met de Arduino Killer ESP8266

Maak kennis met de Arduino Killer ESP8266 / DIY

Wi-Fi is een essentieel onderdeel van alles wat met Internet of Things (IoT) DIY-projecten te maken heeft, maar onze favoriete Arduino komt niet met Wi-Fi en het toevoegen van een Wi-Fi-schild kan de totale kosten op ongeveer $ 40 brengen. Wat als ik je zou vertellen dat er een Arduino-compatibel dev-bord is met ingebouwde Wi-Fi voor minder dan $ 10? Welnu, dat is er.

Maak kennis met de Arduino-moordenaar: ESP8266. Het was slechts een kwestie van tijd voordat de kroon werd gestolen van de glimmende kop van onze geachte Arduino-ontwikkelingsraad. Is het mogelijk om verliefd te worden op een printplaat?

Nadere achteloze namen, de ESP8266 (ook bekend als NodeMCU) werd oorspronkelijk op de markt gebracht als goedkope wifi-add-on voor Arduino-kaarten, totdat de hackergemeenschap besefte dat je de Arduino helemaal uit de vergelijking kon halen.

In minder dan een jaar is de ESP8266 enorm populair geworden en wordt nu zo goed ondersteund en ontwikkeld dat als je Arduino gebruikt, je moet opstaan ​​en kennis moet nemen. Koop er nu een en volg dan deze gids om aan de slag te gaan met het programmeren van je ESP8266 - allemaal vanuit de vertrouwde Arduino IDE.

Je bent natuurlijk niet beperkt tot het gebruik van de Arduino IDE - ze zijn ook compatibel met Lua (wat lijkt op een afgeslankte Python voor mijn beginnende ogen), maar omdat we dit aanpakken vanuit het perspectief van degenen die ons hebben geleerd op Arduino, dat is wat we exclusief vandaag zullen behandelen.

Er zijn nogal wat modellen van ESP8266 in de buurt, maar ik ga door en beveel deze aan: ESP-12E (ook bekend als NodeMCU 1.0 of de nieuwste broer of zus NodeMCU 2.0).

Het is iets duurder dan de anderen ($ 6,50 vergeleken met $ 4!), Maar bevat de seriële driver die nodig is om de chip te programmeren, en heeft een ingebouwde stroomregelaar, evenals veel IO-pinnen. Het wordt breed ondersteund en heeft echt niets anders nodig dan een USB-aansluiting voor programmeren of stroom, dus het is het gemakkelijkst om mee te werken. Als u een ander soort ESP8266-kaart koopt, hebt u mogelijk een aparte 3.3V-vermogensregelaar en een geschikte FTDI-aansluiting nodig voor het programmeren.

Aan de slag met ESP8266-12E en Arduino

Installeer eerst de seriële stuurprogramma's voor dit board. Mogelijk moet u KEXT-ondertekening uitschakelen als u El Capitan gebruikt vanwege nieuwe beveiligingssystemen.

Vervolgens moeten we ondersteuning voor ESP8266 inschakelen via de beheerprogramma van de Arduino IDE. Open Voorkeuren en voer de volgende URL in waar het staat Aanvullende URL's van Board Manager:

Raak Ok, open dan de Boards Manager van Hulpmiddelen -> Bord menu, zoek naar esp8266 en installeer het platform. U zou nu een keuze voor NodeMCU 1.0 moeten zien.

Laat de CPU en de uploadsnelheid ongewijzigd en selecteer uw nieuw geïnstalleerde seriële poort. Op Mac wordt dit weergegeven als cu.SLAB_USBtoUART.

Als een eerste programma, zou ik de eenvoudige Wi-Fi-scanner aanraden - om hem te vinden Bestand -> Voorbeelden -> ESP8266WiFi -> WifiScan. Merk op dat het vrij traag is om te uploaden, maar uiteindelijk zal het zeggen “klaar met uploaden” en op dat moment (niet eerder, of je breekt het uploadproces), kun je de seriële monitor openen. Je zou iets dergelijks moeten zien als:


Succes! Laten we nu proberen om verbinding te maken met één.

Hier is een absoluut eenvoudige barebones-code om verbinding te maken met een Wi-Fi-netwerk. Het doet niets anders dan alleen verbinding maken, maar het is iets dat je later kunt toevoegen. Vergeet niet om de YOUR_SSID en YOUR_PASSWORD te wijzigen in uw wifi-gegevens. Upload, open de Seriële console en je zou zien dat hij verbinding maakt.

 # include const char * ssid = "YOUR_SSID"; const char * wachtwoord = "YOUR_PASSWORD"; WiFiClient wifiClient; void setup () Serial.begin (115200); Serial.print ("Verbinden met"); Serial.println (SSID); WiFi.begin (ssid, wachtwoord); while (WiFi.status ()! = WL_CONNECTED) delay (500); Serial.print ( "");  Serial.println (""); Serial.println ("WiFi verbonden"); Serial.println ("IP-adres:"); Serial.println (WiFi.localIP ());  void loop () 

Is het niet geweldig hoe belachelijk eenvoudig dat was?

Voordat we verder gaan, is hier het pin-out diagram - dit kan later van pas komen. Merk op dat de pincodes waarnaar in code wordt verwezen de GPIO-nummers zijn, niet de D0-16 die waarschijnlijk op uw PCB-print is geschreven. Als je absoluut, positief niet kunt achterhalen waarom een ​​sensor niet werkt, heb je waarschijnlijk de pincodes omhoog gemengd.

Quick Smart Home Sensor met MQTT en DHT11

Hier is een praktisch voorbeeld dat u meteen kunt gebruiken om uw huis te bewaken. We voegen een DHT11 temperatuur- en vochtigheidssensor toe en rapporteren de waarden met behulp van het MQTT-protocol via het Wi-Fi-netwerk, in mijn geval naar een OpenHAB DIY-domoticasysteem (als dat niet het geval is, wilt u misschien onze beginnershandleiding voor OpenHAB opstarten en draaien op een Raspberry Pi Aan de slag met OpenHAB Home Automation op Raspberry Pi Aan de slag met OpenHAB Home Automation op Raspberry Pi OpenHAB is een volwassen, open source domotica-platform dat op verschillende hardware draait en protocol agnostisch is, wat betekent het kan verbinding maken met bijna elke huisautomatiseringshardware die momenteel op de markt is. Lees meer en deel 2, dat specifiek gaat over het installeren van een MQTT-server OpenHAB Beginner's Guide Deel 2: ZWave, MQTT, regels en grafieken OpenHAB Beginner's Guide Deel 2: ZWave, MQTT, regels en grafieken OpenHAB, de open source domotica-software, overtreft ruimschoots de mogelijkheden van andere domoticasystemen op de markt, maar het is niet eenvoudig om deze in te stellen. act, het kan ronduit frustrerend zijn. Lees verder ).

Aan de bedradingszijde verbindt u de DHT-sensor met GND, 3.3v, en ~ D4 (of GPIO 2). Dat is alles wat we nu nodig hebben.

Download deze MQTT- en DHT-bibliotheken. Zelfs als je ze al hebt, download deze hoe dan ook, maak een back-up van wat je hebt en overschrijf hiermee. De nieuwste DHT11-bibliotheek van Adafruit maakt gebruik van een automatisch algoritme voor het bepalen van de snelheid waarmee gegevens van de sensor worden gelezen, maar het is buggy op ESP8266 en 90% van de tijd resulteert in mislukte metingen.

Met de oude versie 1.0 van de bibliotheek die ik in de download heb opgenomen, kun je de timing handmatig wijzigen: 11 werkt het beste voor deze ESP2866-kaarten. Ik heb ook veel exemplaren van de MQTT-bibliotheek doorzocht om er een te vinden die goed is Bel terug functie, en uiteindelijk de landing op de inbegrepen. U moet de Arduino IDE opnieuw opstarten nadat u deze hebt vervangen.

Hier is de volledige code voor het project. Bovenaan staan ​​alle variabelen die u moet wijzigen, inclusief Wi-Fi-details, MQTT-server (in plaats daarvan kunt u een URL gebruiken als u een cloudserver gebruikt, hoewel er geen authenticatie is) en kanalen om gegevens te publiceren op.

Hier is hoe het werkt en een paar opmerkingen:

  • Eerst maken we verbinding met de wifi en vervolgens met de MQTT-server en beginnen dan aan de main lus().
  • In de loop peilen we de DHT-sensor om de 60 seconden en publiceren we de metingen naar de relevante MQTT-kanalen. Nogmaals, als u vindt dat de meeste resultaten resulteren in een foutmelding, hebt u de verkeerde versie van de DHT-bibliotheek - downgrade naar v1.0.
  • client.loop () geeft de besturing door aan de MQTT-bibliotheek, zodat deze kan reageren op inkomende berichten.
  • Er is een bericht ontvangen() functie waar we inkomende berichten afhandelen - doe gewoon een eenvoudige if-instructie om de payload te vergelijken met het bericht dat u verwacht. Je zou dit kunnen gebruiken om bijvoorbeeld een relais te activeren.
  • Nadat ik deze een paar dagen had gebruikt, merkte ik dat ze willekeurig zouden stoppen met werken - ik neem aan dat dit een soort geheugenlek is, maar gezien het feit dat ik niet over de codeervaardigheid beschik om daarmee om te gaan en het misschien met de kernbibliotheken is, Kies elke dag voor een eenvoudige zachte reset. Precies een dag nadat de sensorknopen voor het eerst worden geactiveerd, zullen ze zichzelf opnieuw opstarten.
  • Bij het aandrijven van deze goedkope DHT11-modules van 3,3V, zijn de vochtigheidswaarden veel lager dan zou moeten zijn. Ik heb dit opgelost met een eenvoudige vermenigvuldiging en gekalibreerd tegen een commerciële sensor. Ik zou u adviseren om ook tegen uw eigen bekende bron te bevestigen voordat u op de metingen vertrouwt. Of zet ze aan met 5V - maar je moet een 5v-3.3v logisch niveau shifter plaatsen tussen de datapen en de ESP8266, anders zul je het beschadigen.

Als alles goed is gegaan, zou je nu sensorwaarden moeten ontvangen in je MQTT-makelaar, en doorgaan deze te verbinden met OpenHAB zoals beschreven in deel 2 van onze beginnershandleiding OpenHAB Beginner's Guide Deel 2: ZWave, MQTT, regels en grafieken OpenHAB Beginner's Guide Part 2: ZWave, MQTT, Rules and Charting OpenHAB, de open source domotica-software, overtreft ruimschoots de mogelijkheden van andere domoticasystemen op de markt, maar het is niet eenvoudig om deze in te stellen. In feite kan het ronduit frustrerend zijn. Read More, waar ik je ook liet zien hoe je de gegevens in een grafiek kunt weergeven.

Vaarwel Arduino, we waren zo dol op thee. Grapje: niet overal in mijn huis kan zelfs wifi worden ontvangen, dus voor die plekken heb ik nog steeds een mesh-netwerk nodig met Arduino en RF-ontvangers.

Kijk voor een leuk project hoe je een wifi-knop maakt met de ESP8266 Hoe maak je je eigen wifi-verbonden knop met ESP8266 Hoe maak je je eigen wifi aangesloten knop met ESP8266 In deze tutorial leer je hoe u een voor Wi-Fi geschikte knop kunt maken met behulp van NodeMCU en IFTTT. Lees verder .

Maar wat gaat u doen met ESP8266? Eventuele projecten met ESP8266 die je graag zou willen laten opschrijven bij MakeUseOf? Laat het ons weten in de comments!

Ontdek meer over: Arduino, elektronica, internet der dingen, slimme sensor.