Wetterstation auf Arduino von A bis Z. Teil 2

Fortsetzung folgt. Der vorherige Teil .


Inhaltsverzeichnis:



Weich Komponentenauswahl



Die Wahl der Hard- und Software ist eng miteinander verbunden und wird als „Henne und Ei“ bezeichnet. Wo soll ich anfangen, mit Hardware, mit Software? Wenn Sie über gute Hardware verfügen, jedoch keine Treiber, Bibliotheken und Software (IDE, Dienstprogramme für Firmware usw.), ist dies nutzlos und umgekehrt.


Daher möchte ich Sie noch einmal über die Wahl zwischen nRF24L01 + und ESP8266 für den Anschluss von Fernsensoren an die Zentraleinheit informieren.


Tatsache ist, dass der ESP8266 nicht nur ein dummer WiFi-Adapter ist, sondern einen Mikrocontroller an Bord hat, dessen Leistung und Speicherkapazität Arduino überlegen sind . Standardmäßig verfügt der ESP8266 über eine Firmware in Form einer Reihe von AT-Befehlen. In diesem Fall wird der ESP als einfaches Modem verwendet. Es gibt jedoch fortgeschrittenere Firmware, hier kann der ESP8266 sogar als Webserver fungieren und natürlich Sensoren wie Arduino steuern.


Alle diese fortschrittlichen Firmwares haben jedoch Nachteile, die es (insgesamt mit eisernen Fragen, über die ich bereits geschrieben habe) nicht erlaubten, ESP8266 in diesem Projekt zu verwenden:


  • Die gesamte Firmware ist noch sehr roh (Stand 2016).
  • einige bereit nicht frei
  • Die Eingabeschwelle für das Debuggen und Vornehmen von Änderungen ist viel höher als die von Arduino.

Infolgedessen konnte ich keine vorgefertigte geeignete erweiterte Firmware finden und bin noch nicht bereit, meine eigene zu erstellen. Der ESP8266-Chip ist ein umfangreiches und interessantes Thema.


Die Standard-AT-Firmware hat wiederum auch Nachteile:


  • sie sind noch feucht (Stand 2016)
  • Ich konnte keine normale Bibliothek für Arduino finden, um das ESP8266-Modul mit AT-Befehlen zu steuern. Ich musste selbst eine "Kollektivfarm" einrichten.

Auf der anderen Seite ist das Funkmodul nRF24L01 + einfach und unkompliziert, es gibt einen super RadioHead, mit dem man arbeiten kann, und keine Programmierprobleme. Die Bibliothek ist gut dokumentiert, was wichtig ist.


Mit RadioHead können Sie Datenstrukturen (und nicht nur einzelne Zahlen) übertragen, die in diesem Projekt implementiert sind. Mit Blick auf die Zukunft kann ich sagen, dass RadioHead Daten zuverlässig mit Wiederholungen übertragen kann, wenn sie nicht zum ersten Mal erreicht werden. Die Bibliothek kümmert sich um all diese Dinge.


Zum Energiesparen verwende ich die Low Power Library , die einfach ist und nur das enthält, was Sie benötigen.


Hier ist ein Stück Code:


//    2.402 GHz ( 2), 2Mbps, 0dBm rfdata.init(); //     ( ,  ) rfdata.sendtoWait((uint8_t*)&dhtData, sizeof(dhtData), SERVER_ADDRESS); //  LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);` 

Das ist alles!


Bei Verwendung des ESP8266 in einem am Fenster montierten Sensor wäre ich gezwungen gewesen, einen WiFi-Zugangspunkt zu erstellen und irgendwie Daten zu übertragen (wo ist die Firmware, wo ist die Software?). Oder lassen Sie den Sensor Daten direkt an den Webserver senden und der Zentraleinheit (die in diesem Fall nicht mehr die Rolle der "Zentraleinheit" spielt) beibringen, die Daten von dort zu lesen, um sie auf der Karte anzuzeigen.


Mit anderen Worten, ich habe mich für eine größere Autonomie von WiFi-Internet und PHP + MySQL-Server entschieden. Sie können jetzt mit dem Nieten einer Wetterstation beginnen, ohne über einen Internetzugang und / oder ein Hosting für den Server zu verfügen. In diesem Fall benötigen Sie keinen ESP8266. Fügen Sie ihn einfach später hinzu.


Zum Lesen von Daten von Sensoren wie DHT gibt es eine Adafruit DHT-Sensorbibliothek . Die Arbeit damit ist einfach und unkompliziert.


Die Adafruit BMP085 Unified Library, für die die Adafruit Sensor Abstract Level Library erforderlich ist, ist für einen Drucksensor geeignet.


Alle Bibliotheken haben Beispiele für Skizzen.


Das ist alles vielleicht mit dem theoretischen Teil. „Unsere Ziele sind klar, die Aufgaben sind definiert. Für die Arbeit, Genossen! “


Zentraleinheit. Eisen


Nun, nach all der Aufregung gehen wir endlich zur Versammlung!


Hinweis Wenn Sie noch nie eine Wetterstation gesammelt haben (na ja!), Können Sie beginnen, ohne alle Details zur Hand zu haben. Sie können beispielsweise ohne Funkmodul und / oder ESP8266 starten. Möglicherweise fehlt auch der Luftdrucksensor BMP180. Später hinzufügen. In diesem Fall müssen Sie in der Skizze unabhängig voneinander die Abschnitte des Codes auskommentieren, die für die Interaktion mit fehlenden Blöcken verantwortlich sind. Dies ist jedoch nicht so schwierig. Ich werde zeigen wie.


Die Hauptsache ist, dass sich zumindest etwas angesammelt und verdient hat, dann macht es mehr Spaß, weiterzumachen.


Wie bereits erwähnt, basiert die Zentraleinheit auf dem Arduino MEGA. Wir werden auch brauchen:


  • Temperatur- und Feuchtigkeitssensor DHT11
  • Luftdrucksensor Typ BMP180
  • WiFi-Modul ESP8266
  • 2,4 GHz nRF24 Funkmodul
  • LCD1604-Display (4 Zeilen mit jeweils 16 Zeichen) können Sie für 5 US-Dollar kaufen
  • Netzteil mit einem 5-12 V DC-Ausgang (ich habe das Laden von einem Mobiltelefon mit einem USB-Ausgang verwendet, was praktisch ist)
  • ein Steckbrett zum Löten, ein Lötkolben, Kolophonium, Lot oder ein normales lötfreies Arduino-Steckbrett. Persönlich habe ich aus Gründen der Zuverlässigkeit gelötet, da das Projekt eindeutig langwierig war und nicht unter einer versehentlich vom Steckbrett gezogenen Verkabelung leiden wollte.

Sie können ein Entwicklungsboard zum Entlöten ab 1 US-Dollar kaufen. Nehmen Sie eine größere Größe, genug für alle Verbindungen. Und noch einmal: Lesen Sie vor dem Kauf die Beschreibung, nicht das Bild.


Eine lötfreie Gebühr kann ab 2 US-Dollar erworben werden. Nehmen Sie eine größere Größe, genug für alle Verbindungen.


Es gibt folgende Arten von Verbindungskabeln:


  • Dupont-Kabel "Vater-Mutter" (es gibt auch "Vater-Vater", "Mutter-Mutter"). Dies ist ein Kabel aus mehreren Drähten mit unterschiedlichen Isolationsfarben und Anschlüssen für Stiftkontakte für Arduino. Mit diesen Kabeln ist es bequem, die Platinen und Sensoren direkt mit dem Arduino zu verbinden, ohne ein Steckbrett zu verwenden.
  • Herkömmliche Verbindungsdrähte für ein lötfreies Steckbrett für Arduino.
  • Ein Bündel Drähte zum Löten.

Der erste Schritt war das Löten des LCD-1604. Zuerst habe ich die Stifte an die Platine gelötet, dann die Anschlüsse an das Steckbrett.



Blick von unten.



Ich habe eine Ahnung ohne vorläufige Verkabelung gelötet, daher wird hier keine Schaltung angegeben. Tun Sie, was bequemer ist, es wird nicht schlimmer sein. Halten Sie sich an das Prinzip, dass der schwarze Draht immer die Erde ist, rot das „Plus“ der Stromversorgung ist, der Rest der Farben funktioniert. Es stellte sich so heraus.




Um nicht zu vergessen, wo sich die Anschlüsse befinden, „bemalte“ er Teile der Tafel nebenan mit einem weißen Korrektor und fertigte die entsprechenden Beschriftungen an. Hässlich? Aber praktisch und schnell, es ist ein Prototyp!



Pinbelegung und Anschluss


Anzeige 16 × 4 LCD1604


Weitere Informationen zum Display und zur Arbeit damit finden Sie unter Google „Arbeiten mit Zeichen-LCDs basierend auf HD44780“. Beachten Sie, dass Sie die Polarität der Stromversorgung der LCD-Anzeige sorgfältig prüfen müssen und dass die Versorgungsspannung im Bereich von + 4,5 ... 5,5 V liegt. Eine unaufmerksame Einstellung dazu kann zum Ausfall der Anzeige führen!


Pin LCD 1604Arduino MEGAArduino unoBeschreibung
VssGNDGNDGND
Vdd5 V.5 V.4,7 - 5,3 V.
RS224Ein hoher Pegel bedeutet, dass das Signal an den DB0-DB7-Ausgängen Daten sind, ein niedriger Pegel bedeutet einen Befehl
RwGNDGNDBestimmt die Richtung der Daten (Lesen / Schreiben). Da der Vorgang des Lesens von Daten von einem Indikator normalerweise nicht beansprucht wird, ist es möglich, an diesem Eingang konstant einen niedrigen Pegel einzustellen
E.235Ein Impuls mit einer Dauer von mindestens 500 ms an diesem Pin bestimmt das Signal zum Lesen / Schreiben von Daten von den Pins DB0-DB7, RS und WR
DB4248Eingehende / ausgehende Daten
DB5259
DB62610
DB72711
LED A ++ 5V oder 220 Ohm Widerstand → + 5VLED-A
LED B-GND
V0GND- oder 10kΩ-Trimmer

Die Software-Initialisierung sieht folgendermaßen aus:


 // Arduino MEGA LiquidCrystal lcd(22, 23, 24, 25, 26, 27); // Arduino UNO LiquidCrystal lcd(4, 5, 8, 9, 10, 11); 

Temperatur, Luftfeuchtigkeit DHT11


Anschließen eines DHT11-Temperatur- und Feuchtigkeitssensors (SainSmart). Legen Sie den Sensor mit der Vorderseite nach oben. Die Kabel werden von links nach rechts beschrieben.


DHT11Arduino Mega
DATENDigitaler Pin 2 (PWM) (siehe DHTPIN unten)
Vcc3,3-5 V (5 V empfohlen; bessere externe Stromversorgung)
GNDGND

Software-Initialisierung


 #define DHTPIN 2 //   Digital pin 2 (PWM) #define DHTTYPE DHT11 // . DHT.h //  DHT dht(DHTPIN, DHTTYPE); 

Barometer BMP180


Anschluss des Atmosphärendrucksensors BMP180 (Barometer) + Temperatur über I2C / TWI-Schnittstelle.


BMP180Arduino Mega
Vccnicht verbunden
GNDGND
SCL21 (SCL)
SDA20 (SDA)
3.33,3 V.

Für UNO: A4 (SDA), A5 (SCL).


 //  Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085); // sensorID 

nRF24L01 +


Kurze Eigenschaften:


  • Frequenzbereich 2.401 - 2.4835 GHz
  • 126 Kanäle. Der Nullkanal beginnt bei 2400 MHz und dann befindet sich Kanal 70 mit einem Schritt von 1 MHz beispielsweise bei 2470 MHz. Bei der Einstellung der Übertragungsgeschwindigkeit von 2 Mbit / s beträgt die Kanalbreite 2 MHz
  • Spannungsversorgung 1,9 - 3,6 V (3,3 V empfohlen)

Hier ist die Pinbelegung des Moduls.


Pinbelegung nRF2401L +


Einige empfehlen, sofort einen 100-nF-Keramikkondensator (1µF, 10µF möglich) an die HF-Stromkabel anzulöten, um elektrisches Rauschen zu vermeiden.


Pinbelegung nRF24L01 + (siehe oben auf der Platine, wo sich der Chip befindet, die Stifte sollten unten sein):


Pin 2 3,3VPin 4 CSNPin 6 MOSIPin 8 IRQ
Pin 1 GNDPin 3 CEPin 5 SCKPin 7 MISO

Anschluss für Wetterstation:


Arduino MeganRF24L01 +
3,3 V.VCC Pin 2 (bessere externe Stromversorgung)
Pin D8CE Pin 3 (Chipfreigabe in)
SS Pin D53CSN Pin 4 (Chip Select In)
SCK-Pin D52SCK Pin 5 (SPI Clock In)
MOSI-Pin D51SDI Pin 6 (SPI Daten in)
MISO Pin D50SDO Pin 7 (SPI Datenausgang)
IRQ-Pin 8 (Interrupt-Ausgang) nicht angeschlossen
GNDGND Pin 1 (Masse in)

Die Programmierung des Funkmoduls wird im Softwareteil ausführlich beschrieben.


ESP8266


Pinbelegung ESP8266 (siehe oben auf der Platine, wo sich die Chips und Stifte unten befinden sollten):


GNDGPIO2GPIO0Rx
TXCH_PDRESETVcc

Anschließen des ESP8266 für eine Wetterstation:


ESP8266Arduino Mega
TX10-polig (SoftwareSerial RX)
Rx11-polig (SoftwareSerial TX)
Vcc3,3 V.
GNDGND
CH_PDÜber 10K Widerstand an 3,3V Arduino
GPI0Nicht unbedingt. Über 10K Widerstand an 3,3V Arduino
GPI2Nicht unbedingt. Über 10K Widerstand an 3,3V Arduino

KDPV


Montage der Zentraleinheit. Ich schnitt das „Motherboard“ unter meinen Schuhen aus einem Karton heraus und schraubte den Rest mit 3 Schrauben darauf.


Montage der Zentraleinheit


Wie Sie an dieser Stelle sehen können, wird das gesamte Essen aus Arduino-Stiften bereitgestellt, d.h. Nichts geht direkt an die Stromversorgung, und bisher ist genug Strom vorhanden.


Wie alles. Ich habe nichts vergessen.


Löten, verbinden. Im nächsten Teil wird eine Arbeitsskizze für die Zentraleinheit gegeben und unsere Wetterstation zeigt bereits etwas.


Source: https://habr.com/ru/post/de425927/


All Articles