Ich würde gerne in einem ESPNow-Netzwerk auch mit dem PC mitmachen. Vor allem, um einem Programm auf dem PC den Zugriff auf Geräte im ESPNow-Netzwerk zu ermöglichen. Deshalb habe ich mit einem M5ATOM lite ein entsprechendes Programm entworfen.

Hier ist der erste funktionsfähige Entwurf:

Der erste funktionsfähige Entwurf von E2S (ESPNowAdapter_001.m5f)

An diesem Entwurf gibt es noch viel zu tun. Die grundlegende Brückenfunktion zwischen ESPNow und PC funktionieren aber schon. Bisher können auf der ESPNow Seite aber nur Broadcast-Nachrichten benutzt werden. Später wird es erforderlich sein auch mit einzelnen Geräten direkt zu kommunizieren.

Die Variable serialmode wurde eingebaut, um ggf. den Echobetrieb, wie er standardmässig von Putty verwendet wird zu unterstützen. Sonst sieht man nicht was man schreibt. Das ist aber nur für Terminalbetrieb sinnvoll. Man kann natürlich auch im Terminalprogramm den Echomodus abschalten. Wenn ein Programm auf das ESPNow-Netzwerk zugreift, weiß es was es tut und benötigt die Rückmeldung nicht, es wird dadurch eher verwirrt.

Die serielle Schnittstelle (UART) ist mit den Pins 1 und 3 verbunden. Das ist der Anschluß des Seriell zu USB-Wandlers. Deshalb kann der PC einfach mit einem USB-Kabel angeschlossen werden. Über die entsprechende COM-Schnittstelle kann dann das ESPNow-Netzwerk erreicht werden.

Fortsetzung folgt …

2. Anlauf

Beim ersten Versuch habe ich als Hardware einen M5ATOM lite genommen. Nun wollte ich aber mehr Kontrolle über das Geschehen haben und auf einen M5Sick C+ zurückgegriffen, der gerade auf dem Arbeitsplatz herum lag. Die empfangenen Daten werden jetzt auf dem Display angezeigt.

So sieht das ganze Programm aus:

Das Zweite Programm für den M5Stick C+ (ESPNowAdapter_004.m5f)

Da die Einzelheiten darauf nur schlecht zu erkennen sind folgen jetzt die 3 Blöcke einzeln:

Das Hauptprogramm

Hauptprogramm

Display darstellen.

Diese Funktion stellt die Informationen auf dem Display dar. Allerdings nur halbherzig. Es gibt nur die seriell empfangenen Daten aus. Da es mir in diesem Programm nicht auf ein perfektes Design, sondern auf den Funktionalität ankommt, habe ich keine weitere Zeit inverstiert. Wird vielleicht später nachgeholt.

Funktion: refresh_screen

Die ESP Now Empfangsroutine

ESP Now arbeitet interruptgesteuert. Wenn eine Nachricht eintrifft, wird ein Inerrupt ausgelöst, das Hauptprogramm unterbrochen und die Interrupt Service Routine abgearbeitet. Also das was im nächsten Bild zu sehen ist. Anschließend wird das Hauptprogramm dort fortgesetzt wo es unterbrochen wurde.

Die Interrupt Service Routine für den ESP Now Empfang

Auf der seriellen Seite sieht es in einem Terminal u.B. so aus:

Terminalfesnster

Die letzte, die drittletzte und die fünftletzte Zeile wurden vom Terminal zum ESP Now Netz geschickt.

Heute ist es soweit. Ich werde meine ersten Versuche mit ESP Now unternehmen.

Das Sendeprogramm

Zuerst habe ich einen Sender erstellt. Dazu habe ich einen M5ATOM lite genommen. Dieser soll auf Knopfdruck eine Nachricht (Hallo #lfd.Nr.) senden. Diese Nachricht wird zur Kontrolle auch über ein UART und die USB-Schnittstelle an einen PC gesendet. Hier zeigt Putty die Nachricht an. Die RGB-LED des M5ATOM lite leuchtet normal gelb. Wenn die Nachricht erfolgreich versendet wurde leuchtet sie kurz blau und wenn sie an den PC übermittelt wurde kurz grün auf.

Mein erstes Sendeprogramm (ESPNowTX_003.m5f)

Im Bild oben ist eine Broadcast Aussendung, also eine Nachricht an alle aktiviert. Der deaktivierte Block sendet nur an eine Adresse aus der Adresstabelle, die am Anfang definiert ist.

Dieses Programm funktioniert wie es soll.

Das Empfangsprogramm

Für den Test des Empfangsprogrammes habe ich einen M5Stick C genommen, damit ich die Nachricht anzeigen kann. Und genau das tut es auch. Es zeigt in der Titelzeile die eigenen MAC-Adresse an. Darunter die MAC-Adresse des Senders und die Nachricht.

Mein erstes Empfangsprogramm (ESPNowRX_003.m5f)

Auch dieses Programm tut was es soll. Allerdings wurden beim ersten Versuch keine Nachrichten Empfangen. Der Austausch gegen einen anderen M5Stick C brachte aber Erfolg. Offenbar ist der zuerst verwendete M5Stick C defekt, ob wohl er sich über WLAN brennen ließ. Nachdem ich die Firmware und das Programm erneut aufgespielt hatte funktionierte dieser M5Stick C auch.

Ein Sende- und Empfangsprogramm

Da bisher alles sehr gut lief habe ich gleich noch ein Programm geschrieben, dass sowohl Senden, als auch Empfangen kann. Ich brauche es für die Entwicklung eines Konverters, der serielle Signale vom PC in das ESPNow-Netzwerk überträgt und umgekehrt.

Sende- und Empfangsprogramm (ESPNowTRX_001.m5f)

In dem Block „Taste A was Pressed“ sollte der Text für jedes Gerät individuell angepasst werden. Nach dem Text wird eine laufende Nummer ausgegeben.

Die Displayausgabe habe ich in eine Funktion getan, weil ich diese an 2 verschiedenen Stellen im Programm benötige.

Ganz unten im Display und ganz klein wird die Versorgungsspannung über die USB-Buchse und der aufgenommene Strom angezeigt. Wenn die Spannung > 4V ist in grün und < 4V in rot. Dann ist es Zeit die Powerbank zu wechseln!

Die Stromversorgungsdaten werden alle 10 Sekunden gemessen und ausgegeben.

Ein kleines Problem gibt es bei dem Sende- und Empfangsprogramm allerdings. Gelegentlich wird alles im Display ganz klein dargestellt. Beim nächsten Displayrefresh wird aber alles wieder so wie es sein soll. Also kein wirkliches Problem.

Leider funktionierte der Code nicht mehr, wenn er auf das Gerät downgeloaded wurde 🙁 Der ESPNow-Teil arbeitete nicht.

Schließlich fiel einer von den drei M5Stick C die ich im Einsatz hatte ganz aus. Nach dem Löschen im Brenner ging nichts mehr. Er wurde nicht mehr vom Brenner gefunden.

Ich habe die Reset-Taste 6 Sekunden gedrückt damit das Gerät sicher ausgeschaltet ist und erstmal bei Seite gelegt. Am nächsten Morgen habe ich es erneut an den PC angeschlossen. Nun hat der Brenner es erkannt und ich konnte es löschen und die Firmware darauf spielen. Nun läuft es wieder, als wäre nie etwas gewesen. Also immer etwas Geduld mit dem M5Stick C haben, nach einer Weile kommt er meist wieder zur Vernunft.

Weiterhin musste ich feststellen, dass die Kommunikation nicht auf Kanal 1, sondern auf Kanal 6 erfolgte, obwohl Kanal 1 im Programm eingestellt war! Und genau das war das Problem ! Ich habe es nicht gleich richtig eingeordnet. Nach dem ich auf meinem Tablet einen Netzwerkscanner gestartet hatte, konnte ich sehen, dass das Gerät mit dem auf ihm gespeicherten Programm tatsächlich auf Kanal 1 arbeitet und die anderen auf Kanal 6.

Also beim Testen im RAM läuft immer Kanal 6, beim echten Einsatz wird der im Programm vorgegebene Kanal benutzt!

Beim Übertragen des Programms per RUN wird dieser Block nicht ausgewertet! Ich habe es bei M5Stack gemeldet. Mal sehen wie lange es dauert bis dieser Bug behoben ist.

Erweiteres Sende-Programm für ATOM lite

Bisher hat das Sendeprogramm nur auf Knopfdruck Daten gesendet. Nun würde ich gerne eine automatische Aussendung implementieren. Dazu habe ich einen M5ATOM lite genommen und ESPNowTX_003.m5f erweitert. Ich habe einen Timer eingefügt, der durch einen kurzen Doppeldruck auf die Taste gestartet und durch einen langen Tastendruck (> 1 Sekunde) wieder gestoppt wird. Ein normaler Tastendruck löst wie bisher das Senden eines Datenpaketes aus. Außerdem habe ich die Sendeblöcke in ein Funktion „sende“ ausgegliedert, da diese nun an mehreren Stellen im Programm benötigt wird.

ESPNowTX_004.m5f für M5ATOM lite

Bisher vermisste ich einen Kommentarblock in Blockly sehr. Ich hatte doch gelernt, das Programmcode unbedingt mit Kommentaren versehen werden muss. Diesen Block gibt es tatsächlich nicht, was ich als grobe Nachlässigkeit der Entwickler betrachte, da insbesondere bei einer Anfängersprache Kommentare unverzichtbar sind.

Nun habe ich aber in einem Beispielprogramm eine Lösung gefunden. Blockly enthält einen Block zum Ausführen von Micropython Code. Dieser darf aber nicht nur ausführbaren Code, sondern auch Kommentare enthalten. Warum sagt uns das niemand von M5Stack?

Oder hatte nur ich ein Brett vor dem Kopf?

26. Dezember 2020 · Kommentieren · Kategorien: M5Stack · Tags: , ,

Die M5-Geräte mit dem ESP32 haben sehr viele Möglichkeiten mit anderen Geräten zu kommunizieren. Ein direckter Weg in den PC führt über die USB-Schnittstelle. Dazu braucht man in Blockly nur eine neue UART initialisieren mit TX-Pin = 1 und RX-Pin = 3. Und schon erfolgt die serielle Ausgabe der UART über USB.

Mein Testprogramm. Rechts ist die Putty-Ausgabe zu sehen.

Viel Spaß beim Basteln !