Projekte

Erstellen eines einfachen Datenloggers mit dem Framework RIOT (Realtime Internet of Things)

Tutorial zur SoftFOX - Analysesoftware und den Datenloggern von Scanntronik (November 2018).

Anonim

Erstellen eines einfachen Datenloggers mit dem Framework RIOT (Realtime Internet of Things)


RIOT, Realtime Internet der Dinge, ist ein Framework, das entwickelt wurde, um die Verwendung des ESP8266 mit Mikrocontrollern einfach zu machen. In diesem Projekt werden wir die Einfachheit von RIOT demonstrieren, indem wir einen Datenlogger erstellen, der die Lichtpegel auf einem Graphen einer PC-Server-Anwendung aufzeichnet.

Einführung

Im letzten RIOT-Projekt haben wir gelernt, wie man einen einfachen RIOT-Server auf einem Windows-PC und einen einfachen RIOT-Client erstellt, dessen LED vom Server ein- und ausgeschaltet werden kann. Von diesem Projekt konnten wir sehen, dass RIOT potentiell jedes System mit einem UART-Port in ein internetfähiges Gerät verwandeln kann.

In diesem Projekt werden wir uns die Client-Server-Kommunikation ansehen, bei der ein Client Spannungsmesswerte von einem LDR / Widerstandsteiler nimmt und diese Daten dann auf ein Diagramm graphisch darstellt, das auf dem Server (geschrieben in VB.net) zu finden ist. Es wird dringend empfohlen, dass Sie das vorherige Projekt durchgehen, bevor Sie dieses Projekt durchführen, da Teile des Codes und des Schaltplans zwar recycelt werden, jedoch keine Erklärung liefern.

Hinweis: RIOT heißt jetzt RIOTOUS und kann unter http://www.riotousframework.com gefunden werden

Voraussetzungen und Software zum Kompilieren

Damit RIOT auf der Clientseite korrekt funktioniert, muss eine bestimmte AT- und SDK-Version verwendet werden. Die AT-Version muss 1.1.0.0 sein und die SDK-Version muss 1.5.4 sein. Frühere Versionen haben Fehler beim Schließen von Verbindungen und spätere Versionen haben entweder fehlenden oder fehlerhaften Code. Um die Anforderungen des RIOT clientseitigen Frameworks zu erfahren, klicken Sie hier.

Für die Erstellung des Projekts benötigen Sie:

  • Microchip IDE 8.92
  • Microchip C18-Compiler
  • Visual Studio Express 2012

Lesen Sie auch das vorherige Projekt in dieser Serie durch, um eine vollständige Erklärung dessen zu erhalten, was RIOT ist.

Das Schema

In diesem Projekt müssen wir das ADC-Modul verwenden, das auf dem PIC18F25K20 (PDF), einem 3, 3-V-Mikrocontroller, zu finden ist. Ein 3.3V-Gerät wird verwendet, da das ESP8266 selbst ein 3.3V-Gerät ist und wir daher keinen Logik-Level-Umsetzer benötigen.

Ein zusätzlicher Kondensator ist in der 3, 3 V-Leitung (C5) in der Nähe des Reglers enthalten, um das Entfernen von hochfrequentem Rauschen an der Stromleitung zu unterstützen.

Der Schaltplan für das Projekt. klicken um zu vergrößern

Clientseitiger Code

Die erste Aufgabe für unseren clientseitigen Code besteht darin, die Onboard-ADC-Peripherie korrekt einzurichten. Unser analoger Wert liegt auf RA0, daher verwenden wir den folgenden Code, um diesen Pin als analogen Eingang zu verwenden, den ADC einzuschalten und den ADC zu konfigurieren. Der Setup-Code unten konfiguriert auch den internen Oszillator für maximale Geschwindigkeit (16 MHz) und x4 PLL. Dieser Code befindet sich in setup.h.

Der nächste Code, der in unserem Client-Controller benötigt wird, ist die Konfiguration von RIOT. Dazu gehört das Erstellen des ISR, das Konfigurieren des UART-Moduls und das Anweisen von RIOT, wie Daten über UART gesendet werden. Dieser Code (der RIOT die Verwendung des UART-Moduls mitteilt) wird von Ihnen codiert und in IoT_ClientFramework.c eingefügt.

Dieser ISR-Code teilt RIOT mit, dass ein neues Byte empfangen wurde, und aktualisiert auch die Zustandsmaschine im RIOT-Framework.

Wenn der Client konfiguriert ist, ist es an der Zeit, die Geräteausgänge einzurichten, RIOT zu initialisieren, eine Verbindung mit einem Wi-Fi-Netzwerk herzustellen und dann eine Verbindung zu einem RIOT-Server herzustellen.

Jetzt ist es an der Zeit, die Datenprotokollierung zu starten! Unser Kunde wird ab und zu Messungen von RA0 durchführen (ein paar Messungen pro Sekunde, obwohl Sie dies ändern können, wenn Sie möchten) und dann den Messwert an den RIOT-Server übertragen. Timing wäre besser mit einem der Peripheriegeräte des Timer-Moduls, aber zur Vereinfachung wird dieses Beispiel eine einfache Verzögerungsschleife verwenden. Die Verzögerungsschleife kann hier verwendet werden, da RIOT unter Verwendung eines UART-Empfangsinterrupts aktualisiert wird, das Vorrang vor dem Hauptlaufcode hat.

Sobald die Verzögerung abgeschlossen ist, wird eine Analog-Digital-Umwandlung eingeleitet, indem das GO-Bit in dem ADCON0-Register gesetzt wird. Das ADC-Modul löscht das GO-Bit, sobald das Lesen durchgeführt wurde, so dass while (ADCON0bits.GO) endlos wiederholt wird, bis das ADC-Ergebnis bereit ist. Wenn das ADC-Ergebnis bereit ist, übertragen wir die oberen 8 Bits des Ergebnisses in das dataBuff-Array (Größe 1) und senden dann dieses einzelne Byte an unseren Server. Ein Array der Größe 1 wird verwendet, da Daten mit einem Zeiger auf ein Array an das RIOT-Framework gesendet werden (so kann ein Stream von Bytes in einem Array gesendet werden).

Im Folgenden sind die Konfigurationswerte für den PIC18F25K20 aufgeführt (falsche Hardware-Konfiguration ist eine häufige Quelle von Problemen in Mikrocontroller-Projekten).

Serverseitiger Code

Genau wie im clientseitigen Code werden wir den Großteil des Codes aus dem vorherigen Projekt recyceln (insbesondere das Layout der Anwendung, die Serverkonfiguration und den Ticker, der verwendet wird, um nach neuen Daten von Clients zu suchen und festzustellen, welche Clients sich befinden immer noch verbunden). Der Unterschied zwischen dieser Anwendung und der vorherigen Projektanwendung besteht im Entfernen der LED-Befehlsschaltflächen und eines Diagrammobjekts.

Aber zuerst eine kurze Anmerkung zu VB: VB.net (zusammen mit der Visual Studio 2012 IDE) muss eine der praktischsten Sprachen sein, die ich je benutzt habe. Bevor ich dieses Projekt machte und kein natürlicher Programmierer war, war ich besorgt darüber, wie ich eine GUI-Anwendung mit grafischen Fähigkeiten erstellen würde. Wie sich herausstellt, enthält VB.net ein Chart-Objekt, das absolut perfekt für den Job ist. Ein einfaches Ziehen / Ablegen in das Hauptformular mit zwei oder drei Zeilen Setup-Code bringt Ihnen Fähigkeiten zum Chartieren, die in einer Sprache wie C oder C ++ schwieriger wären (ich glaube jedoch, dass diese Bequemlichkeit das .net-Framework selbst sein kann zur Sprache als visuelles C # ist auch eine ausgezeichnete Sprache, wenn sie in Visual Studio benutzt wird).

Das erste, was wir tun werden, ist ein Diagramm zu unserem Formular hinzuzufügen, indem Sie zu Toolbox> Daten> Diagramm gehen. Von dort aus können Sie die Größe des Diagrammbereichs ändern, das Farbschema ändern und vieles mehr.

Eine coole Sache über Objekte in VB.net ist, dass sie automatisch in einer Konfigurationsdatei initialisiert und konfiguriert werden, mit der wir uns nicht befassen müssen. Stattdessen müssen wir uns nur darum kümmern, den Bereich zu löschen, eine neue Datenreihe zu erstellen und dann die Rohdaten so zu plotten, wie sie kommen! Bevor wir uns selbst überholen und anfangen, das Diagrammobjekt zu manipulieren, müssen wir die RIOT-Serverklasse konfigurieren. Zukünftige Versionen von RIOT werden erlauben, dass die gesamte Konfiguration von RIOT mit Hilfe von Funktionen durchgeführt werden kann, aber im Moment wird die Konfiguration durch Bearbeiten der VB-Dateien durchgeführt. In Server.vb muss nur eine Zeile bearbeitet werden, dh Zeile 114, bei der der Benutzer die lokale IP-Adresse des Geräts eingeben muss. Aus irgendeinem Grund konnte ich dies nicht mit localhost erreichen.

Zurück zum Diagrammobjekt, das Löschen des Diagramms und das Erstellen einer neuen Datenserie ist eher trivial. Dies wird gemacht, wenn wir die Server-Start-Taste drücken.

Jetzt, da das Diagramm bereit ist, Daten zu plotten und der Server initialisiert wurde, ist es an der Zeit, eingehende Daten von den Clients abzurufen, das Flag für verfügbare Daten zu löschen und die Daten im Diagramm darzustellen.

Quick Note: Die Visual Studio-Anwendung und das Video unten zeigen das Diagramm als "loggedLight" gekennzeichnet, wobei die Daten tatsächlich "loggedDarkeness" darstellen. Dies liegt an der Potentiometerkonfiguration und kann leicht durch Subtraktion des aufgezeichneten Messwerts von 256 (max.) Behoben werden. Dies würde das protokollierte Licht anstelle der protokollierten Dunkelheit liefern.

Stückliste

Teil

Schematische Referenz

Menge

PIC18F25K20

IC1

1

AMS1117 3.3V Regler

IC2

1

ESP8266 ESP-01

ESP8266

1

1 kΩ Widerstand

R3, R4

2

5, 6 kΩ Widerstand

R2

1

10 kΩ Widerstand

R5

1

LDR

R1

1

LED

D1, D2

2

100 nF Kondensator

C1, C2, C4, C5

4

22 μF Kondensator

C3

1

Das Projekt wird ausgeführt

Wie im vorherigen Projekt werden wir die Schaltung auf einem Steckbrett aufbauen. Sie werden feststellen, dass sich der AMS1117 in einem IC-Paket befindet, das mit Breadboards sehr unfreundlich ist. Dies wird leicht gelöst, indem man die große Lasche abschneidet und dann das Gerät an ein Stück Stripboard lötet. Von dort kann ein 3-Pin-Straight-Header verbunden werden, um ein TO-220-ähnliches Paket zu erstellen.

Konvertieren eines unfreundlichen Pakets in eine brettfreundliche Version!

Kompilieren Sie das MPLAB-Projekt und programmieren Sie das PIC (vorzugsweise im Freigabemodus) und führen Sie das VB.net-Programm aus. Wenn alles gut geht, sollte Ihre Server-Anwendung nicht abstürzen, wenn Sie auf "Start Server" klicken und der Client sollte starten, sobald die Stromversorgung aktiviert ist. Schließlich sollte der Client in der Lage sein, die Indikator-LEDs einzuschalten, wenn er sich zuerst mit dem ausgewählten Wi-Fi-Netzwerk und dann mit dem RIOT-Server verbindet. Sobald der Client eine Verbindung herstellt, sollte das Diagramm auf dem Server beginnen, sich mit Werten aus dem LDR zu füllen.

RIOT Datenloggercode

Video des Projekts in Aktion

Zusammenfassung

Dieses Projekt zeigt, wie wenig Aufwand erforderlich ist, um einen Datenlogger aus wenigen einfachen Teilen und einem kostenlosen Softwarepaket zu erstellen, das für die meisten Heimcomputer verfügbar ist. Dieses Projekt könnte leicht für die Verwendung mit verschiedenen Arten von Sensoren (Temperatur, Feuchtigkeit usw.) erweitert werden. Außerdem sind Sie nicht darauf beschränkt, nur die Daten zu plotten; Sie könnten es auch in einer Datei für die nachfolgende Analyse speichern.

Im nächsten RIOT-Projekt werden wir die Kommunikation zwischen Geräten betrachten, bei der ein Client Nachrichten über den RIOT-Server an einen anderen Client sendet.

Gib diesem Projekt einen Versuch für dich selbst! Holen Sie sich die Stückliste.