Wi-Fi ist ein unentbehrlicher Teil des Bausatzes für alle IoT-Projekte (Internet of Things), aber unser Lieblings-Arduino ist nicht mit Wi-Fi ausgestattet, und das Hinzufügen eines Wi-Fi-Schildes kann die Gesamtkosten auf etwa 40 US-Dollar bringen. Was, wenn ich dir ein Arduino-kompatibles Entwicklungsboard mit eingebautem Wi-Fi für weniger als $ 10 sagte? Nun, da ist es.
Treffen Sie den Arduino Killer: ESP8266. Es war nur eine Frage der Zeit, bis die Krone vom glänzenden Kopf unseres teuren Arduino-Entwicklungsboards gestohlen wurde. Kann man sich in eine Platine verlieben?
Eingängige Namen beiseite, das ESP8266 (auch bekannt als NodeMCU) wurde ursprünglich als kostengünstiges Wi-Fi-Add-On für Arduino-Boards vermarktet, bis die Hacker-Community erkannte, dass man das Arduino vollständig aus der Gleichung herausschneiden konnte.
In weniger als einem Jahr hat das ESP8266 an Popularität gewonnen und wird jetzt so gut unterstützt und entwickelt, dass, wenn Sie Arduino gerade verwenden, Sie aufstehen und Notiz nehmen müssen. Kaufen Sie jetzt eine, folgen Sie dann dieser Anleitung, um mit der Programmierung Ihres ESP8266 zu beginnen - alles aus der vertrauten Arduino IDE heraus.
Sie sind natürlich nicht darauf beschränkt, die Arduino-IDE zu verwenden - sie sind auch mit Lua kompatibel (was für meine Anfängeraugen wie ein abgespecktes Python aussieht), aber da wir das aus der Perspektive derjenigen, die es gelernt haben, angehen auf Arduino, das werden wir heute exklusiv behandeln.
Es gibt eine ganze Reihe von ESP8266-Modellen, aber ich empfehle diese: ESP-12E (auch bekannt als NodeMCU 1.0 oder seine neueste Schwester NodeMCU 2.0).
Es ist ein wenig teurer als die anderen ($ 6.50 im Vergleich zu $ 4!), Enthält aber den seriellen Treiber benötigt, um den Chip zu programmieren, und hat einen eingebauten Leistungsregler, sowie viele IO-Pins. Es ist weit verbreitet und braucht wirklich nichts außer einer USB-Verbindung für Programmierung oder Stromversorgung, so dass es am einfachsten ist, mit zu arbeiten. Wenn Sie eine andere ESP8266-Karte kaufen, benötigen Sie möglicherweise einen separaten 3, 3-V-Leistungsregler und einen geeigneten FTDI-Anschluss für die Programmierung.
Erste Schritte mit ESP8266-12E und Arduino
Installieren Sie zuerst die seriellen Treiber für diese Karte. Möglicherweise müssen Sie die KEXT-Signierung deaktivieren, wenn Sie El Capitan aufgrund neuer Sicherheitssysteme ausführen.
Als nächstes müssen wir die Unterstützung für ESP8266 vom Board Manager der Arduino IDE aktivieren. Öffnen Sie die Einstellungen, und geben Sie die folgende URL ein, in der die URLs des Additional Board Manager angegeben sind :
http://arduino.esp8266.com/package_esp8266com_index.json
Drücken Sie Ok, dann öffnen Sie den Boards Manager im Menü Extras -> Board, suchen Sie nach esp8266 und installieren Sie die Plattform. Sie sollten jetzt eine Auswahl für NodeMCU 1.0 sehen.
Lassen Sie die CPU und die Upload-Geschwindigkeit unverändert und wählen Sie den neu installierten seriellen Port. Auf Mac erscheint dies als cu.SLAB_USBtoUART .
Als erstes Programm empfehle ich den einfachen WLAN-Scanner - finden Sie dazu unter Datei -> Beispiele -> ESP8266WiFi -> WifiScan . Beachten Sie, dass das Hochladen ziemlich langsam ist, aber irgendwann wird es "Upload fertig" sagen und an diesem Punkt (nicht vorher, oder Sie brechen den Upload-Prozess), können Sie den seriellen Monitor öffnen. Sie sollten etwas Ähnliches sehen:
Erfolg! Versuchen wir jetzt, eine Verbindung herzustellen.
Hier ist ein absolut einfacher Barebones-Code zum Verbinden mit einem Wi-Fi-Netzwerk. Es macht nichts anderes als nur verbinden, aber es ist etwas, das Sie später hinzufügen können. Denken Sie daran, das YOUR_SSID- und YOUR_PASSWORD in Ihre WLAN-Daten zu ändern. Hochladen, öffnen Sie die serielle Konsole und Sie sollten sehen, dass es sich verbindet.
#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() { }
Ist es nicht großartig, wie lächerlich einfach das war?
Bevor wir fortfahren, hier ist das Pinout-Diagramm - es könnte später nützlich sein. Beachten Sie, dass die Pin-Nummern, auf die im Code Bezug genommen wird, die GPIO-Nummern sind, nicht die D0-16, die wahrscheinlich auf Ihrer Platine geschrieben sind. Wenn Sie absolut nicht herausfinden können, warum ein Sensor nicht funktioniert, haben Sie wahrscheinlich die Pin-Nummern gemischt.
Quick Smart Home Sensor mit MQTT und DHT11
Hier ist ein praktisches Beispiel, das Sie sofort verwenden können, um Ihr Zuhause zu überwachen. Wir werden einen DHT11 Temperatur- und Feuchtigkeitssensor hinzufügen und dann die Werte mit dem MQTT-Protokoll über das Wi-Fi-Netzwerk melden, in meinem Fall mit einem OpenHAB DIY-Hausautomationssystem (falls nicht, sollten Sie unseren Einsteigerhandbuch lesen Öffnen von OpenHAB auf einem Raspberry Pi Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi Erste Schritte mit OpenHAB Home Automation auf Raspberry Pi OpenHAB ist eine ausgereifte Open-Source-Plattform für die Hausautomatisierung, die auf einer Vielzahl von Hardware läuft und protokollunabhängig ist Es kann sich mit fast jeder Hausautomations-Hardware auf dem heutigen Markt verbinden Lesen Sie mehr, und Teil 2, die sich speziell mit der Installation eines MQTT-Servers befasst OpenHAB Anfängerleitfaden Teil 2: ZWave, MQTT, Regeln und Charts OpenHAB Anfängerleitfaden Teil 2: ZWave, MQTT, Regeln und Charting OpenHAB, die Open-Source-Heimautomatisierungssoftware, geht weit über die Möglichkeiten anderer auf dem Markt verfügbarer Hausautomationssysteme hinaus - aber es ist nicht einfach, sich einzurichten wirklich frustrierend sein. Weiterlesen ).
Schließen Sie den DHT-Sensor auf der Verdrahtungsseite an GND, 3, 3 V und ~ D4 (oder GPIO 2) an. Das ist alles, was wir für jetzt brauchen.
Laden Sie diese MQTT- und DHT-Bibliotheken herunter. Auch wenn Sie sie bereits haben, laden Sie diese trotzdem herunter, sichern Sie, was Sie haben, und überschreiben Sie mit diesen. Die neueste DHT11-Bibliothek von Adafruit verwendet einen automatischen Algorithmus, um die Geschwindigkeit zu bestimmen, mit der Daten vom Sensor gelesen werden, aber es ist fehlerhaft auf ESP8266 und 90% der Zeit führt zu fehlerhaften Lesungen.
Mit der alten Version 1.0 der Bibliothek, die ich in den Download aufgenommen habe, können Sie das Timing manuell ändern: 11 funktioniert am besten für diese ESP2866-Boards. Ich ging auch durch viele Kopien der MQTT-Bibliothek, um eine gute Callback- Funktion zu finden, und landete schließlich auf der einbezogenen. Sie müssen die Arduino IDE neu starten, nachdem Sie diese ersetzt haben.
Hier ist der vollständige Code für das Projekt. Ganz oben befinden sich alle Variablen, die Sie ändern müssen, einschließlich Wi-Fi-Details, MQTT-Server (eine URL kann verwendet werden, wenn ein Cloud-Server verwendet wird, obwohl keine Authentifizierung vorhanden ist) und Channels zum Veröffentlichen von Daten.
So funktioniert es und ein paar Hinweise:
- Zuerst verbinden wir uns mit dem WLAN, dann mit dem MQTT-Server und beginnen dann mit der Hauptschleife ().
- In der Schleife rufen wir den DHT-Sensor alle 60 Sekunden ab und veröffentlichen Messwerte zu den relevanten MQTT-Kanälen. Wenn Sie feststellen, dass die meisten Messwerte zu einer Fehlermeldung führen, haben Sie die falsche Version der DHT-Bibliothek - ein Downgrade auf v1.0.
- client.loop () übergibt die Kontrolle an die MQTT-Bibliothek, sodass sie auf eingehende Nachrichten reagieren kann.
- Es gibt eine messageReceived () - Funktion, mit der wir eingehende Nachrichten behandeln - machen Sie einfach eine if-Anweisung, um die Payload mit der erwarteten Nachricht zu vergleichen. Sie können damit beispielsweise ein Relais aktivieren.
- Nachdem ich diese für ein paar Tage ausgeführt hatte, stellte ich fest, dass sie nach dem Zufallsprinzip aufhören würden zu arbeiten - ich nehme an, dies ist eine Art Speicherleck, aber da ich nicht über die Programmierfähigkeiten verfüge, könnte ich das mit den Kernbibliotheken tun Ich habe mich jeden Tag für einen einfachen Soft-Reset entschieden. Genau einen Tag nachdem die Sensorknoten zum ersten Mal aktiviert wurden, starten sie sich selbst neu.
- Wenn diese billigen DHT11-Module von 3, 3 V angetrieben werden, sind die Feuchtigkeitswerte viel niedriger als sie sein sollten. Ich habe das mit einer einfachen Multiplikation gelöst und gegen einen kommerziellen Sensor kalibriert. Ich würde Ihnen raten, auch Ihre eigene bekannte Quelle zu bestätigen, bevor Sie sich auf die Messwerte verlassen. Alternativ können sie mit 5V betrieben werden - aber Sie müssen einen 5v-3.3v Logic Level Shifter zwischen den Datenstift und das ESP8266 setzen, sonst beschädigen Sie es .
Wenn alles gut gegangen ist, sollten Sie jetzt Sensor-Messwerte in Ihrem MQTT-Broker empfangen und diese mit OpenHAB verbinden, wie in Teil 2 unseres Einsteigerhandbuchs OpenHAB Anfängerleitfaden Teil 2: ZWave, MQTT, Regeln und Charting OpenHAB Anfänger beschrieben Guide Teil 2: ZWave, MQTT, Regeln und Charting OpenHAB, die Open-Source-Hausautomatisierungssoftware, geht weit über die Möglichkeiten anderer Hausautomationssysteme auf dem Markt hinaus - es ist jedoch nicht einfach, sie einzurichten. In der Tat kann es geradezu frustrierend sein. Lesen Sie weiter, wo ich Ihnen auch gezeigt habe, wie man die Daten grafisch darstellt.
Lebe wohl Arduino, wir haben dich so geliebt. Nur Spaß: nicht überall in meinem Haus kann sogar Wi-Fi, so dass für diese Spots brauche ich immer noch ein Mesh-Netzwerk mit Arduino und RF-Empfänger. Aber was werden Sie mit ESP8266 machen? Alle Projekte mit ESP8266, die Sie gerne bei MakeUseOf sehen würden? Lass es uns in den Kommentaren wissen!