Lok24
26.08.2020, 15:53

Editiert von
Lok24
27.08.2020, 08:42

+17Powered Up mit M5Stack Atom

Hallo zusammen,

heute möchte ich mal eine weitere Lösung für die bekannten Probleme mit Powered Up zeigen:

- kein Smartphone nötig
- Krokodil o.ä. lässt sich mit der FB regeln
- Zwei Motoren gegenläufig mit derselben Taste der FB
- Wenn es heute geht, geht es auch in 10 Jahren noch
- Plug and play (s.u.)

Das „Geheimnis“ ist ein kleiner Microprozessor, nur 3x3 Noppen groß.

Die Hardware

Es ist ein ESP32 „M5Stack ATOM Matrix“. Das Schöne daran: er hat oben eine 5x5 LED Matrix, und diese Fläche ist auch ein Taster.
Außerdem ist er genau 3x3 Noppen groß und grau ...

[image]



[image]



Das Testprogramm

Es handelt sich um ein c++ - Programm und nutzt die legoino-Bibliotheken von Cornelius Munz.
Ich habe das so gestaltet, dass der ATOM das Programm fest eingebaut hat, dennoch aber aus mehreren Optionen (Profilen) gewählt werden kann.



Die Idee

- Man überlegt sich eine Anwendung (z.B. FB mit Regelung für alle Motoren)
- Schreibt das Programm dazu (das gibt es als Beispiel auch zum Download)
- schreibt das fest in den Controller
- fertig

Ab dann macht dieser Prozessor nach dem Einschalten (1 sec) immer genau das und nur das.
(Bis jemand was neues reibschreibt, aber das muss man ja nicht….)

Dazu braucht er nur noch 5V, mehr nicht. Kein PC, kein SmartDevice, nichts von alledem. Vor allem: keine Ahnung was der überhaupt wie macht.

Und erweitert…

Im Video zeige ich wie man auch mehrere „Profile“ anlegen kann, also wie Remote und Hub agieren sollen, bei welchen Tastendrücken was wie passieren soll. Aber man könnte auch ein Profil „Haunted House“ oder „Karussell“ oder irgendwas anderes hinzufügen, in denselben Baustein.

Die Kosten

Die ATOM starten bei ca 6 $ beim Chinamann, der Matrix kostet da um 8$, meiner hat 16 € bei Bezug in D gekostet. Das war‘ schon.

In 10 Jahren …

… läuft das immer noch genauso, wenn nichts kaputtgeht (und man es sich verkneift, das LEGO Hub upzudaten….)

Für Entwickler

Man braucht
- die Arduino IDE
- die legoino-Bibliothek
- die ESP32-Bibliotheken
- einen PC

Das hat man in einer Viertelstunde zusammengesammelt, wenn man sich mittel bis wenig auskennt. Es gibt etliche Tutorials im Netz, da hab ich mein Weisheiten auch her. (habe aber länger gebraucht, da ich gar kein c++ kannte)

Plug and Play

Doch, schon.
Irgendwer (mit Ahnung)
- schreibt ein Programm („2 beliebige Motoren gegenläufig“)
- kauft den ATOM für x €
- schafft das Programm drauf (max. 5 Minuten Arbeit)
- und verkauft das Ganze für x +y € weiter

Der Empfänger steckt es an sein USB-Ladeteil, fertig.

Oder man hat in der Bekanntschaft jemanden der das kann. Wenn die Programme irgendwo vorliegen braucht man das nur zuammenzuklicken.

Ausblick

Was fehlt sind also Ideen, was man überhaupt programmieren kann und will und braucht, und Leute die des Ganzen mächtig sind.

Grüße

Werner

Ps:
Hier als Teaser mal das "Profil1", das ist schon sehr überschaubar....

void control1() {

int sstep = 10;
int sdelay = 400;
int vmax = 75;

if (FB.isLeftRemoteUpButtonPressed()) Speed = min(vmax, oldSpeed + sstep);
if (FB.isLeftRemoteDownButtonPressed()) Speed = max(vmax * -1, oldSpeed - sstep);
if (FB.isLeftRemoteStopButtonPressed()) Speed = 0;

if ( Speed != oldSpeed) {
TrainHub.setMotorSpeed(portA, Speed * 1);
TrainHub.setMotorSpeed(portB, Speed * -1);
oldSpeed = Speed;
disSpeed(Speed);
delay(sdelay);
}
}



Dirk1313 , RobbyRay , asper , hassel62 , cubo , MTM , Legoben4559 , aap134 , SuklaaTalvella , Ben® , Xris , Garbage Collector , tastenmann , freakwave , SirJoghurt , UncleTom , JuL gefällt das (17 Mitglieder)


14 vorhergehende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen Beitragsbaum

Lok24
29.08.2020, 14:51

Als Antwort auf den Beitrag von Ruppie

Editiert von
Lok24
29.08.2020, 15:05

Re: Powered Up mit M5Stack Atom

Hi Marc,

vielen Dank für die ausführliche Antwort.

Ich habe leider kein Wort verstanden, was aber nicht an Dir liegt.
Es liegt eher daran, dass ich mich dafür Null interessiere (hatte ich auch schon geschrieben .

Das einzige was mir weiterhilft sind funktionierende Beispiele.
Dann gelingt es mir gelegentlich aus 2 Beispielen ein Programm zu machen.

Derzeit scheitert es an der Sensor-Erkennung, das habe ich aufgegeben (mangels Idee, wie Fehler zu suchen).


Grüße

Werner



Ruppie
29.08.2020, 16:08

Als Antwort auf den Beitrag von Lok24

+1Re: Powered Up mit M5Stack Atom

Lok24 hat geschrieben:

Hi Marc,

Derzeit scheitert es and der Sensor-Erkennung, das habe ich aufgegeben (mangels Idee, wie Fehler zu suchen).


Hallo Werner,

Ich habe mich schon eine Weile nicht mehr mit der legoino lib befasst, hole ich demnächst nach
Das Problem mit der Sensorerkennung und Auswertung über das LEGO Bluetooth Protokoll ist, das die Sensoren Ersteinmal zur Übertragung der Werte konfiguriert werden müssen.
In Teilen ist das bestimmt schon in der Lib drin, man kann da doch bestimmten "weg" fahren sofern ich mich erinnere, nicht nur "An" Aus.

Bezüglich Hilfe:
Neben Hilfe von Conelius bit du hier auch falsch: Such dir mal ein ESP32 Forum.
Zur Einarbeitung sehr empfohlen: https://randomnerdtutorials.com

Wie du schreibst: Im grunde ist das alles nicht für dich von Interesse dich mit den Grundlagen zu beschäftigen, ist in Ordnung.
Ich sage es mal so: So wirst du aber immer primär von den Arbeiten dritter sein. Wenn dir das Genügt, auch ok.

Wenn du den Grad der "Abhängigkeit von dritten minimieren wilst geht es eben nur in Eigenleistung.

Wie gesagt; deine Endscheidung




PS:
Tip wenn du es mehr selber erforschen willst:
https://infocenter.nordic...iffer_ble%2Fintro.html

Es gibt günstig einen USB Dongle wie da Beschrieben
https://www.mouser.de/Pro...wLWEAQYASABEgKIOfD_BwE

> Ich benutze sowas ähnliches

oder dies;

https://www.adafruit.com/product/2269
das geht auch
https://www.adafruit.com/product/2267


Der trick geht wie folgt:
Es gibt ein Wireshark Plugin damit kannst du mit den beschriebenen (funktionierte zuletzt bei mir jedoch nur mit Wireshark 3.07 nicht neuer).

Nun kann man den Datenverkehr, beispielsweise der " Powered Up App" oder Control +, oder eben FB und Zug Hub mitverfolgen.
Da sieht man dan beispielsweise genau diezeichenketten, welche du schon bei deinen PI projekten gesehen hast.

Insbesondere Interessant ist es sich die "Handshake" oder Startsequent zwischen Technic Hub und Beispielsweise Control+ einmal anzusehen.
Da stehen dann auch die Telegramme drin, welche die Sensoren für den Datentransfer zur App konfigurieren,
Du musst diese dann "nur" noch gemäß LEGO BLE Doku nachvollzihen.


Ich habe momentan wenig Zeit.
Ich habe mal "Schmierversuche gemacht" mit den unterschiedlichen Sensoren, wenn ich die noch finde schreibe ich mal kurz was dazu
PS:
Vielleicht hilft dir im dr. Bricks Forum oder bei Eurobricks auch nochmal jemand.



Thomas52xxx gefällt das


Lok24
29.08.2020, 16:27

Als Antwort auf den Beitrag von Ruppie

Editiert von
Lok24
29.08.2020, 16:31

Re: Powered Up mit M5Stack Atom

Hallo Marc,

Ruppie hat geschrieben:

Ich habe mich schon eine Weile nicht mehr mit der legoino lib befasst, hole ich demnächst nach
Das Problem mit der Sensorerkennung und Auswertung über das LEGO Bluetooth Protokoll ist, das die Sensoren Ersteinmal zur Übertragung der Werte konfiguriert werden müssen.

Wenn Du das sagst...
Es gibt bei legoino ein Beispiel, das funktioniert mal, mal nicht.

Ruppie hat geschrieben:
Wie du schreibst: Im grunde ist das alles nicht für dich von Interesse dich mit den Grundlagen zu beschäftigen, ist in Ordnung.
Ich sage es mal so: So wirst du aber immer primär von den Arbeiten dritter sein. Wenn dir das Genügt, auch ok.
Das bin ich bei meinem Fernseher auch, den kaufe ich fertig Laden.
Und, immer bedenken: ich habe derzeit gar keine Anwendung für sowas! Ich brauche das nicht.
Und wenn ich was programmieren will kann ich die LEGO App nehmen.

Ruppie hat geschrieben:
Ich habe momentan wenig Zeit. Vielleicht hilft dir im dr. Bricks Forum oder bei Eurobricks auch nochmal jemand.

Du könntest mir durchaus helfen, indem Du mir einfach die vier Progammzeilen für dieses "lpf2" hier postest.
Lauffähig, keine verbale Beschreibung. Dann würde ich das mal probieren.

Momentan sieht das so aus:

#include "PoweredUpHub.h"

PoweredUpHub TrainHub;
PoweredUpHub:: Port portA = PoweredUpHub:: Port::A;

TrainHub.init();



Ruppie
29.08.2020, 16:54

Als Antwort auf den Beitrag von Lok24

Powered Up - Hinweise zur Konfiguration und Abfrage der Sensoren der Ports und intern des HUB

Lok24 hat geschrieben:

Hi,

Ich gehe jetzt nochmal das "Sensor"-Problem an, aber das kann bei mir liegen. Mal schauen.



Empfehlung:
Schau dir mal die Doku zum LEGO Protokoll an: https://lego.github.io/le...ut-format-setup-single

Abschnitt 3.3 Message Type Definitions - PORT(s) related

Mit 0x41h konfigurierst du einen Port zur Übergabe eines einzelnen Sensorwertes
Mit 0x42 konfigurierst du einen Port zu Übergabe mehrere Sensorwerte, sofern verfügbar, Ein Motor kann etwa Speed und Winkel zurükgeben

0x45h, und 0x46h sind die entsprechenden Messagecodes für die Datentelegramme welche dann mit den Sensorwerten zurückgeschickt werden.

Es ist von der Konfiguration Abhängig, ob die Daten automastisch bei Wertänderung, oder nur auf Anforderung gesendet werden.
Die Konfiguration der Port sensoren ist immer eine Sequenz:
- Übertragung sperren
- Parametrieren
- freigeben


Ohne Garantie, habe ich mal bei mir etwas herumgespielt, eis aber nicht mehr wlcher stand das war , nur als Grobe Richtung in einer meiner Init Routinen:


Ohne Gewähr: Beispiel für Port D, kann Spuren von Unfug enthalten

#1 SendData[]={0x0a,0x00,0x41,0x03,0x01,0x10,0x00,0x00,0x01,0x00};
#2 SendData[]={0x08,0x00,0x42,0x03,0x01,0x00,0x10,0x20};
#3 SendData[]={0x05,0x00,0x42,0x01,0x02};
#4 SendData[]={0x0a,0x00,0x41,0x01,0x01,0x02,0x00,0x00,0x00,0x01};
#5 SendData[]={0x05,0x00,0x42,0x01,0x03};
#6 SendData[]={0x08,0x00,0x81,0x03,0x11,0x51,0x00,0x00};

Für Port A
#1 {0x0a,0x00,0x41,0x01,0x02,0x02,0x00,0x00,0x00,0x01};


Für "Andere Ports" hier Port "0x63"
SendData_17[]={0x0a,0x00,0x41,0x63,0x00,0x01,0x00,0x00,0x00,0x01};



Erinnerung: Info. welcher Port was macht ist hier beschrieben:https://www.eurobricks.com/forum/index.php?/forums/topic/162288-powered-up-a-tear-down/&page=23
Im unteren Bereich nach meinem Post insbesondere mal die Anmerkungen von AlecDGeneric und Mr Hobbles vom 12.02.
ansehen und die Links

Hoffe das hilft

Marc



Lok24
29.08.2020, 17:04

Als Antwort auf den Beitrag von Ruppie

Re: Powered Up - Hinweise zur Konfiguration und Abfrage der Sensoren der Ports und intern des HUB

Hallo Marc,

Ruppie hat geschrieben:

Hoffe das hilft

Nein, hilft mir leider gar nichts.

Ich rufe das Beispielprogramm "legoino -> TrainColor" auf,
mal liefert es 0 als Sensorwert, mal > 0.
(> 0 wäre richtig)

Das kann eigentlich nicht richtig sein?

Das (und nur das) ist mein Problem.
Ein legoino-Problem. Oder mein ESP 32?



Ruppie
29.08.2020, 17:31

Als Antwort auf den Beitrag von Lok24

Re: Powered Up - Hinweise zur Konfiguration und Abfrage der Sensoren der Ports und intern des HUB

Lok24 hat geschrieben:

Hallo Marc,



Ich habe in der lib auch nur die folgenden Implementierungen zu Sensoren gefunden:

double getDistance();
int getColor();
int getRssi();
int getBatteryLevel();
double getHubVoltage();
double getHubCurrent();
int getBoostHubMotorRotation();
int getTiltX();
int getTiltY();
int getFirmwareVersionBuild();
int getFirmwareVersionBugfix();
int getFirmwareVersionMajor();
int getFirmwareVersionMinor();
int getHardwareVersionBuild();
int getHardwareVersionBugfix();
int getHardwareVersionMajor();
int getHardwareVersionMinor();


In der Summe aller dinge offenbar eben nicht vollständig (nur eine Vermutung)

In den Beispielen gibt es ja ein bisschen was zu den Sensoren, hast du ja schon gefunden.

Zu deiner Frage: Im Zweifel ein Fehler in der Implementierung in der Bibliothek oder ein Fehler in der Anwendung am Vesten du fragst Cornelius.


Im Kern das Problem was ich meinte: Mittelfristig wirst du nicht darum herum kommen dir ein eigenen "Framework " aus Funktionen zu erarbeiten.
Ansonsten bist du stets "von den Happen" abhängig welche dir andere hinwerfen, keine Wertung nur eine Meinung,



Ruppie
29.08.2020, 17:36

Als Antwort auf den Beitrag von Lok24

Re: Powered Up - Hinweise zur Konfiguration und Abfrage der Sensoren der Ports und intern des HUB

Lok24 hat geschrieben:



Das kann eigentlich nicht richtig sein?


Sagen wir mal so:
Wenn "0" ein ungültiger Farbwert ist kann es ein schlecht abgefangener Lesefehler sein.
Die Frage ist, ob du zwische gültigen und ungültigen Farbwerten ein Muster erkennst, oder ob die "0" Werte zufällig "eingestreut" erscheinen.

Wie der Sensor arbeitet ist ja nicht genau belegt (oder bei Philo schauen) im Zweifel ist eben nicht garantiert, das der Hub die fehlerhaften Werte nicht mitüberträgt
Wie beschrieben, Mal Cornelius fragen oder selber ausfiltern in deinem Programm.

Giancann hat doch eine eigene Implementierung mit dem Farbsensor und ESP32 gemacht, frag den doch mal, er ist doch so hilfsbereit



Ruppie
29.08.2020, 17:43

Als Antwort auf den Beitrag von Lok24

Re: Powered Up mit M5Stack Atom

Lok24 hat geschrieben:

Hallo Marc,

Du könntest mir durchaus helfen, indem Du mir einfach die vier Progammzeilen für dieses "lpf2" hier postest.
Lauffähig, keine verbale Beschreibung. Dann würde ich das mal probieren.



Mal was anderes:

1. achte mal ein wenig auf die Form deiner Ansprache, sei einfach nicht traurig wenn mir schlicht die Zeit fehlt dir den Arsch zu pudern, um es mal deutlich zu sagen.
2. Wie ich dir bereits mehrfach sagte: Derzeit mit anderen Projekten Busy. ESP32 , leguino... sind momentan "out of scope".
3. Wir haben nun genügend oft erörtert das unserer Projekte Verschieden sind, daher gibt es keine Codebasis zum tauschen, du wirst dich also mit den verbalen Hilfestellungen begnügen müssen.


Eine feine Zeit



Lok24
29.08.2020, 17:47

Als Antwort auf den Beitrag von Ruppie

Re: Powered Up - Hinweise zur Konfiguration und Abfrage der Sensoren der Ports und intern des HUB

Hallo,

Ruppie hat geschrieben:

In den Beispielen gibt es ja ein bisschen was zu den Sensoren, hast du ja schon gefunden.

Ja, sicher. Und es funktioniert manchmal, manchmal nicht.

Ruppie hat geschrieben:
Zu deiner Frage: Im Zweifel ein Fehler in der Implementierung in der Bibliothek oder ein Fehler in der Anwendung am Vesten du fragst Cornelius.

Das hatte ich heute vor, komme aber nicht dazu

Ruppie hat geschrieben:
Im Kern das Problem was ich meinte: Mittelfristig wirst du nicht darum herum kommen dir ein eigenen "Framework " aus Funktionen zu erarbeiten.

Nein, das habe ich ja vor Jahren schon auf meinem Raspberry (ohne alle externen Libraries, direkt auf dem LWP3 aufsetzend) getan. Deswegen kenne ich auch das Protokoll und wie man Sensoren entsprechend ansteuert (notifications), damit sie rückmelden, muss man ja für die FB sowieso auch machen.

Und ich muss das nicht nochmal tun, ich kann, wenn das nicht läuft, es einfach sein lassen.
Wie gesagt, ich brauche das überhaupt gar nicht.

Das was ich machen wollte steht im Eingangspost, und das tut es ja.
Eben etwas sehr einfaches.



Lok24
29.08.2020, 17:51

Als Antwort auf den Beitrag von Ruppie

Re: Powered Up - Hinweise zur Konfiguration und Abfrage der Sensoren der Ports und intern des HUB

Ruppie hat geschrieben:

Wenn "0" ein ungültiger Farbwert ist kann es ein schlecht abgefangener Lesefehler sein.
Die Frage ist, ob du zwische gültigen und ungültigen Farbwerten ein Muster erkennst, oder ob die "0" Werte zufällig "eingestreut" erscheinen.

*seufz* Wenn das Programm 0 anzeigt zeigt es immer 0, egal welche Farben man ihm zu fressen gibt.
Wenn es beim Start 255 zeigt zeigt es in der Folge auch die Farben korrekt.

Ruppie hat geschrieben:
Wie der Sensor arbeitet ist ja nicht genau belegt (oder bei Philo schauen) im Zweifel ist eben nicht garantiert, das der Hub die fehlerhaften Werte nicht mitüberträgt
Wie beschrieben, Mal Cornelius fragen oder selber ausfiltern in deinem Programm.

Darum geht es halt gar nicht, er arbeitet manchmal gar nicht.

Ruppie hat geschrieben:
Giancann hat doch eine eigene Implementierung mit dem Farbsensor und ESP32 gemacht, frag den doch mal, er ist doch so hilfsbereit
Das ist er, aber ich wüsste nicht mal wie ich die Frage formulieren sollte.
Ich brauchte ein Beispiel. Aber das schrieb ich schon.



37 nachfolgende Beiträge sind ausgeblendet

Alle anzeigen Immer alle anzeigen

Gesamter Thread: