mbot Arduiono mit python programmieren

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
haiflosse
User
Beiträge: 9
Registriert: Mittwoch 17. April 2019, 09:22

Hallo!
Ich habe hier einen mbot Educational Robot Kit mit einem Arduino (Arduino/Genuino Uno) wo ich derzeit mit Arduino C einen mbot programmieren kann.
Dies funktioniert auch recht gut.
Nun wollte ich fragen, ob ich dies auch mit python durchführen könnte.
Hier z.B. ein Code der die zwei rgb Leds abwechselnd zum Leuchten bringt in Arduino c

Code: Alles auswählen

  
  #include <MeMCore.h>

MeRGBLed led;

void setup()
{
  led.setpin(13);
}

void loop()
{

  
led.setColorAt(0, 0, 0, 255); //Set LED0 (RGBLED1) (RightSide) to Blue
  led.setColorAt(1, 0, 0, 0); //Set LED1 (RGBLED2) (LeftSide)  to Red
  led.show();
  delay(500);

  
  led.setColorAt(0, 0, 0, 0); //Set LED0 (RGBLED1) (RightSide) to Blue
  led.setColorAt(1, 0, 0, 255); //Set LED1 (RGBLED2) (LeftSide)  to Red
  led.show();
  delay(500);
}
Vielleicht kann mir jemand behilflich sein, wie ich dies z.b. mit python durchführen könnte.
Vielen Dank
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn es kein microPython fuer die Plattform gibt, dann leider nicht. Aber warum willst du Python verwenden, wenn es mit dem Arduino schon klappt?
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@haiflosse: Anmerkungen zum Arduino-Code:

Im Gegensatz zu der Beschreibung im Beitrag ist das kein C sondern C++.

Kommentare sollten korrekt sein, weil der Leser sonst nicht weiss wer ”lügt”, der Code oder der Kommentar. Und wenn diese Inkonsistenzen häufig genug vorkommen, dann kann man sich Kommentare komplett sparen, weil der Leser anfängt sie zu ignorieren, wenn er gelernt hat, dass man ihnen nicht vertrauen kann, und sowieso immer im Code nachvollziehen muss was tatsächlich passiert.

Im Code betrifft das drei Viertel der Kommentare, nämlich den zweiten, dritten und vierten. Bei den ersten beiden wird die LED nicht auf Rot bzw. Blau gesetzt, sondern *ausgeschaltet* und beim vierten auf Blau und nicht auf Rot.

Am besten schreibt man den Code so, dass man keine Kommentare braucht. Zum Beispiel in dem man für ”magische” Zahlen Konstanten definiert. Im vorliegenden Code könnte man beispielsweise für die LED-Nummern Konstanten definieren an denen der Leser leicht ablesen kann ob es sich um die rechte oder linke LED handelt. Schon braucht man das nicht mehr zu kommentieren.

Code: Alles auswählen

#include <MeMCore.h>

#define RIGHT_LED_INDEX   0
#define LEFT_LED_INDEX    1

MeRGBLed leds;

void setup()
{
  leds.setpin(13);
}

void loop()
{
  leds.setColorAt(RIGHT_LED_INDEX, 0, 0, 255); // Set to Blue.
  leds.setColorAt(LEFT_LED_INDEX, 0, 0, 0);    // Set to Black.
  leds.show();
  delay(500);
  
  leds.setColorAt(RIGHT_LED_INDEX, 0, 0, 0);   // Set to Black.
  leds.setColorAt(LEFT_LED_INDEX, 0, 0, 255);  // Set to Blue.
  leds.show();
  delay(500);
}
Für die Farben kann man sich eine Datenstruktur definieren und konstante, nach den Farben benannte Werte, und eine Funktion die LED-Nummer und eine Farbstruktur entgegeben nimmt. Dann kann man sich den Rest des Kommentars wo die Farbe drin steht, auch noch sparen.

Code: Alles auswählen

#include <MeMCore.h>

#define RIGHT_LED_INDEX   0
#define LEFT_LED_INDEX    1

struct Color { uint8_t red, green, blue; };

static const Color BLACK = {0, 0, 0};
static const Color BLUE = {0, 0, 255};

MeRGBLed leds;

void setup()
{
  leds.setpin(13);
}

static bool setLEDColor(uint8_t index, Color color)
{
  return leds.setColorAt(index, color.red, color.green, color.blue);
}

void loop()
{
  setLEDColor(RIGHT_LED_INDEX, BLUE);
  setLEDColor(LEFT_LED_INDEX, BLACK);
  leds.show();
  delay(500);
  
  setLEDColor(RIGHT_LED_INDEX, BLACK);
  setLEDColor(LEFT_LED_INDEX, BLUE);
  leds.show();
  delay(500);
}
Jetzt könnte man die Wiederholung von fast identischem Code in `loop()` noch durch eine Funktion beseitigen:

Code: Alles auswählen

#include <MeMCore.h>

#define RIGHT_LED_INDEX   0
#define LEFT_LED_INDEX    1

struct Color { uint8_t red, green, blue; };

static Color BLACK = {0, 0, 0};
static Color BLUE = {0, 0, 255};

MeRGBLed leds;

void setup()
{
  leds.setpin(13);
}

static bool setLEDColor(uint8_t index, Color color)
{
  return leds.setColorAt(index, color.red, color.green, color.blue);
}

void showLEDColors(Color right, Color left)
{
  setLEDColor(RIGHT_LED_INDEX, right);
  setLEDColor(LEFT_LED_INDEX, left);
  leds.show();
  delay(500);
}

void loop()
{
  showLEDColors(BLUE, BLACK);
  showLEDColors(BLACK, BLUE);
}
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
haiflosse
User
Beiträge: 9
Registriert: Mittwoch 17. April 2019, 09:22

Danke für die Antworten.
Sorry das der Kommentar falsch war, habe ich übersehen.
Wie kann ich prüfen ob ein microPython vorhanden ist.
Möchte dies gerne auch mit python versuchen.
Verwende den mbot als Schulungsobjekt.
Vielen Dank für eine weitere Antwort
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@haiflosse: Naja, Du müsstest Dich halt bei MicroPython umsehen ob es für den Arduino Uno eine Portierung gibt. Ich habe auf die schnelle keine gefunden, aber in der FAQ was da so über Speicherverbrauch steht, und demnach hat der Uno ziemlich deutlich zu wenig RAM um da sinnvoll MicroPython drauf laufen zu lassen. Falls es überhaupt reicht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
haiflosse
User
Beiträge: 9
Registriert: Mittwoch 17. April 2019, 09:22

Vielen Dank für die Antwort
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

@haiflosse
Da ich zZ auch mit Arduino und C++ aber lieber noch mit Micropython spiele, hab ich da vor kurzem eine ähnliche Suche gestartet.
Für das Arduino Due und ein paar andere hab ich das Projekt Pumbaa gefunden. Das ist ein Port von Micropython auf ein paar Boards. Ich hab mir das aber nicht weiter angeschaut!

Ich empfehle dir aber etwas anderes. Kauf dir ein NodeMCU (ESP32) für 8-9€. Da funktioniert Micropython drauf und es gibt genug Beispiele dafür.
Ich hab den Arduino mkr 1010 und ein Joy-it NodeMCU und muss sagen das letzterer einfach "hübscher" in der Handhabung als Python Jünger ist. Wobei der Weitblick in die C++ Geschichte bestimmt auch nicht schlecht ist.
Die 8-9€ sprechen dabei auch für sich und damit für den ESP32!
Antworten