Der Arduino Uno Q hat eine MPU und eine MCU.
Die MPU läuft unter Debian Trixie aarch64.
Die MCU mit Arduino Ide Code c++.
Lazarus Packete sind die gleichen wie für Raspberry PI.
Die Lazarus Ide läuft !
Programme kann man kompilieren alles ok.
Die Kommunikation zwichen MPU und MCU läuft über eine Arduino App Lab (Rpc calls)
Auf MPU Linux Seite mit Python über eine Bridge Software Lib
Auf MCU Seite mit C++ und der Bridge Lib
In der Arduino App Lab läuft das ganze in einer virtuellen Python Umgebung.
Es gibt aber eine Möglichkeit mit Python direkt mit der MassagePack Lib und Sockets direkt auf die MCU zugreifen und Daten auszutauschen.
Gibt es Beispiele in Lazarus mit MessagePack und Socket wie in Python.
Dann kann man mit Lazarus den Arduino Uno Q genauso benutzen wie mit der Arduino App Lab.
Vieleich kennt sich da jemand aus und könnte mir Tips geben.
https://docs.arduino.cc/tutorials/uno-q/user-manual/
Arduino MCU Code
Code: Alles auswählen
#include "Arduino_RouterBridge.h"
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Bridge.begin();
// We use provide_safe to ensure the hardware call runs in the main loop context
Bridge.provide_safe("set_led_state", set_led_state);
}
void loop() {
}
void set_led_state(bool state) {
digitalWrite(LED_BUILTIN, state ? LOW : HIGH);
}
Python Code
Code: Alles auswählen
import socket
import msgpack
import sys
# 1. Define the connection to the Router's Unix Socket
SOCKET_PATH = "/var/run/arduino-router.sock"
# 2. Parse command line arguments
# Default to turning LED ON (True) if no argument is provided
led_state = True
if len(sys.argv) > 1:
arg = sys.argv[1]
if arg == "1":
led_state = True
elif arg == "0":
led_state = False
else:
print("Usage: python3 msgpack_test.py [1|0]")
sys.exit(1)
print(f"Sending request to set LED: {led_state}")
# 3. Create the MessagePack RPC Request
# Format: [type=0 (Request), msgid=1, method="set_led_state", params=[led_state]]
request = [0, 1, "set_led_state", [led_state]]
packed_req = msgpack.packb(request)
# 4. Send the request
try:
with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as client:
client.connect(SOCKET_PATH)
client.sendall(packed_req)
# 5. Receive the response
response_data = client.recv(1024)
response = msgpack.unpackb(response_data)
# Response Format: [type=1 (Response), msgid=1, error=None, result=None]
print(f"Router Response: {response}")
except Exception as e:
print(f"Connection failed: {e}")
Acia6850