Arduino Uno Q: brug tussen de MCU en de MPU
MCU en MPU
De Arduino Uno Q heeft een MCU (Micro Controller Unit) en een MPU (Micro Processor Unit), en een manier om programma’s te laten communiceren tussen die twee.
Op de MCU, typisch voor een Arduino Uno, draai je een “sketch” die geschreven is in C.
Op de MPU draai je een volledig besturingssysteem (Debian), waarin een toepassing draait die bv gemaakt is in python, gambas, …
Er kunnen ook andere diensten op draaien als webserver, database, …
Als je met een aparte Raspberry Pi en een Arduino Uno werkt, kan je via een seriële kabel (USB) informatie uitwisselen tussen die twee.
Maar omdat de “Q” de twee aan boord heeft, kan je binnenin communiceren.
The Bridge
In dit (gedubt) filmpje worden de basics uitgelegd op basis van de online Arduino documentatie:
https://www.youtube.com/watch?v=fn05RMz14cQ
In de python code heb je bepaalde variabelen die je wil doorgeven naar de C code. Dat gebeurt via de bridge-aanroepen van een functie, waarbij je een bv een boolean meegeeft
(maar kunnen ook meer variabelen zijn zie sketch Pin Toggle waar set_pin_by_name(String name, bool s) is gedefinieerd)
in main.py:
—
from arduino.aps_utils import *
import time
led_state - False
def loop()
global led_state
time.sleep(1)
led_state = not led_state
Bridge.call("set_led_state", led_state)
App.run(user_loop=loop)
—
Aan de andere kant moet het “aangepakt” worden in de sketch/C code, met gebruik van de Bridge via include:
—
#include "Arduino_RouterBridge.h"
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Bridge.begin();
Bride.provide("set_led_state", set_ledstate);
}
—
Router
De “Bridge” is de library. Maar onder de motorkap is het een Linux achtergrondproces dat de dienst uitmaakt: arduino-router heet dat.
Je kan die echt checken op de commandolijn:
systemctl status arduino-router
Dan zie je procesinformatie zoals bij de webserver of database server, en wt info over de laatste aktiviteit.
Je ziet iets als “Accepted monitor connection from=..”, wat een voorgedefinieerd Monitor object is dat als een virtuele Serial Monitor toelaat text via RPC naar de MCU te sturen.
Als je problemen hebt na wat al te zwaar werk met buggy code, kan je hem ook herstarten:
sudo systemctl restart arduino-router
en bij het debuggen kan je gaan kijken in de logs:
journalctl -u arduino-router -f
Het is uitgelegd in de Arduino documentatie:
(ARDUINO DOCS Hardware, UNO Q, Tutorials, UNO Q User Manual).
https://docs.arduino.cc/tutorials/uno-q/user-manual/zoek:
“Bridge – Remote Procedure Call (RPC) Library””
en de code een beetje verder onder “Usage Example”.
Licentie
De Arduino voorbeeldcode gebruikt o.m. de “MPL-2.0”
Mozilla Public License, een licentie op het niveau van bestanden, zodat die apart (her)gebruikt kunnen worden.












