Table of Contents
WIOpi
- WIO-Konfiguration | WIO Control | Benutzer-Bitmaps | WIO-Firmware | WIO Mobil | Kabel | LEDScript (en) | WIOpi
- WIOpi-01 PCB (en)
- WIOpico (en)
- I2C Speed (en)
- Zero Rocrail Server (en)
Vor Montage der Stiftleiste auf dem Zero, siehe hier: WIOpi-01 (en) |
Einführung
WIOpi ist ein Programm für den Raspberry Pi und seine GPIO. (Modell 1, 2, 3, 4 und Null.)
Die Hardwareanforderungen und die Unterstützung sind die gleichen wie für RocNetNode.
Durch Ausführen des WIOpi-Programms auf dem Raspberry Pi verhält es sich und arbeitet es wie ein WIO auf ESP-Basis.
WIOpi läuft im Kontext des Benutzers pi. |
---|
Der Benutzer pi ist standardmäßig in den Gruppen gpio, i2c und spi, so ist es nicht notwendig, dass WIOpi im Superuser-Kontext läuft.
Hinweis: Typ mobile sollte im Root-Kontext ausgeführt werden, um einen Hochleistungsmotor-Thread ausführen zu können.
$ groups pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi
The following files and directories are extracted:
. ├── cam │ └── cam.py ├── reboot.sh ├── scripts │ └── Disco00.led ├── startwiopi.sh ├── update.sh └── wiopi
Die Befehle zum Starten und Stoppen des cam.py-Python-Skripts können in der wiopi.ini. angegeben werden.
Voreinstellungen sind:
<var name="startcam" vt="string" defval="nohup python3 cam/cam.py &"/> <var name="stopcam" vt="string" defval="killall python3"/>
Unterstützte Bords
- Raspberry ZeroW 1 und 2
- Raspberry Pi 1, 2 und 3
Der Raspberry Pi 4 wird nicht unterstützt.
Installieren
Aktivieren von I2C, SPI und UART im raspi-conf-Dienstprogramm.
cd mkdir WIOpi cd WIOpi wget https://wiki.rocrail.net/rocrail-snapshot/WIOpi-ARMHF.tar.gz tar xf WIOpi-ARMHF.tar.gz rm WIOpi-ARMHF.tar.gz
Einen Crontab-Job hinzufügen:
@reboot /home/pi/WIOpi/startwiopi.sh
Der ARMHF-Build läuft auch unter PiOS 64bit. (ARM64)
Swap Size
Die Standard "swap size" von 100MB ist für einen Zero mit 512MB-Speicher nicht ausreichend.
sudo nano /etc/dphys-swapfile
Ändern der "swap size" auf 1024:
CONF_SWAPSIZE=1024
Den Service neustarten:
sudo /etc/init.d/dphys-swapfile stop sudo /etc/init.d/dphys-swapfile start
Befehlszeilen-Optionen
Option | Beschreibung |
---|---|
-info | Aktiviert die Trace-Ebene Info |
-t <filename> | Trace-Dateiname |
-server <ip> | Rocrail-Server-IP oder DNS-Name ¹ |
-id <1…255> | WIOpi-Node-ID |
-softpwm | Software-PWM für Servos verwenden, um Sound-Abspielen zu aktivieren. |
¹ Wenn WIOpi und der Rocrail-Server auf demselben Raspberry Pi betrieben werden, geben Sie localhost an. Für den Autostart tragen Sie die Option in startwiopi.sh ein.
Pinout
Die Pin-Belegung und Zuordnung wird nach dem Start in der Console ausgegeben.
Es ist von der in der wiopi.ini gefundenen Konfiguration abhängig.
Für die Raspberry Pi Pin-Belegung (Pinout information) siehe hier : https://de.pinout.xyz
Mehr detaillierte Informationen: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
Oder in einem Terminal den Pinout-Befehl eingeben.
Unterstützte Hardware
- Pi02 (max. 4 = 128 I/O)
- Pi06 (Power & Patch)
- Pi08 (max. 8 = 128 LED. Output address < = 128)
- ID12 RFID-Leser an Pi01
- SSD1306 / SH1106 OLED (max. 2, begrenzt durch die I2C-Adressierung des SSD1306 / SH1106)
Hinweis: Der SH1106 scheint mit Pi01, I2C-Treiber, inkompatibel zu sein, sodass er direkt mit den I2C-Stiften verbunden werden muss. - HT16K33 (max. 2 Uhren)
- BMx280 (max. 2 Umgebung)
- GCA214 RailCom-Leser an Pi01 (Nur PiOS 32bit, wg. der Nicht-Standard-Baudrate von 250000.)
- Sound abspielen mit "mplayer" (Ohne führenden Schrägstrich)
- Mobil-soft-PWM für Steuerung eines DC-Motors, MOSFET oder H-Brücke 2)
- WS2801 RGB LEDs über SPI (Ausgangsadresse > 128)
- LEDScript-Unterstützung, falls der Port-Typ auf Macro gesetzt ist.
- 2 Servos an den Hardware-PWM-Stiften (phys. 32 & 33 - Adresse 129 und 130). 3)
- Analog-Eingänge: PCF8591
Hinweis: Der WIOpi speichert Servo-Positionen nur im Fall eines shutdown.
Onboard-Servos
Die zwei Onboard-Servos haben die Adressen 129 und 130.
Die Lok-Functionen 1 und 2 sind diesen Onboard-Servo-Adressen zugeordnet.
Hinweis: Der WIOpi speichert Servo-Positionen nur im Fall eines shutdown.
Sound
Die Servo-Ausgänge PWM0 und PWM1 können auch für Audio verwendet werden:
dtoverlay=pwm-2chan,pin=12,func=2,pin2=13,func2=4
Das Filter ist sehr einfach: (Beispiel für einen Kanal und nicht getestet.)
1µ || | Servo0 -+---+----|| |----+ | | || | | /| +-+ | | / | |1| --- +---+ | |5| --- 33n | | | |0| | | | | +-+ | +---+ | | | | \ | GND -+---+------------+ \|
Pi01
LED-Funktionen
Beide LEDs blinken schnell bei ein show-Befehl um sie zu identifizieren.
Ein weiterer show-befehl stoppt das Blinken.
LED1 (grün) | Beschreibung |
---|---|
Aus | WIOpi läuft nicht oder es wird kein GPIO-Zugriff erlaubt. |
Langsames Blinken | Normal-Funktion. |
Schnelles Blinken | Keine Rocrail-Server-Verbindung. |
LED2 (rot) | Beschreibung |
---|---|
Aus | Kommunications-Pause. |
Blinken | Paket empfangen. |
Drucktaste
Falls beide LEDs blinken um sie zu identifizieren, wir dieser Modus gestoppt.
Andernfalls wird eine Abfrageantwort an den Server gesendet.
Signale an Pi02/Pi08/WS2801
Signal-Unterstützung ist auch auf dem Pi02 verfügbar, wenn kein Pi08 angeschlossen ist.
Pi08: 1…128
Pi02: 1…128
WS2801: 129…256 (auf 1…128 zugeordnet)
ID12LA RFID Leser
Das Standard-Seriell-Gerät ist /dev/ttyS0
un kann in wiopi.ini
geändert werden:
serialdev="/dev/ttyAMA0"
Raspberry pi Model | PiOS 10 | PiOS 11 |
---|---|---|
Zero 1 | /dev/ttyAMA0 | |
Rpi 1 | /dev/ttyAMA0 | |
Zero 2 | /dev/ttyS0 | /dev/ttyAMA0 |
Rpi 2…4 | /dev/ttyS0 |
Hinweis: Scheint von der PiOS-Version abhängig zu sein; Das System überprüfen!.
Schritt-Motor-Steuerung
Für Drehscheiben-Einstellungen siehe: WIO-Schritt-Motor
4 Draht | ||
Funktion | Stift | GPIO |
---|---|---|
IN1 (Spule 1) | 27 | 0 |
GND | 9 | - |
IN2 (Spule 2) | 29 | 5 |
IN3 (Spule 3) | 31 | 6 |
IN4 (Spule 4) | 35 | 19 |
HALL (Kalibrieren) | 37 | 26 |
3 Draht | |||
Funktion | Stift | GPIO | Beispiel TB6600 |
---|---|---|---|
STEP(Takt) | 27 | 0 | CLK+ |
GND | 9 | - | EN-, DIR-, CLK- |
DIR | 29 | 5 | DIR+ |
ENABLE | 31 | 6 | EN+ |
HALL (Kalibrieren) | 37 | 26 |
WS2801
WS2801 | Stift | I/O1 | Funktion |
---|---|---|---|
DI | 19 MOSI | 6 | Digital In |
CI | 23 SCLK | 8 | Clock In |
GND | 25 GND | 2 | Ground |
Ausgangs-Einstellungen für LEDScript
Adresse > 128 oder Anzahl, EIN Parameter ist auf Null zu stellen.
Optionen Farbe, Typ Macro.
WIOpi-01
Dateien
The Rpi-Zero header mounted on the bottom side. (without factory header) The Rpi-1/4 header mounted on the top side. (factory default) Short header on the Rpi-1; No native servo support. -------------------- | Rpi0 bottom hdr | -------------------- | | -- Zero set top | | | | ---------------------------------------- | WIOpi-01 | ---------------------------------------- | | || | | || -- Pi2++ piggy bag || | | || ---------------------------------------- | Rpi1/4 top hdr | ----------------------------------------
CAM
Die CAM kann parallel zu WIOpi verwendet werden, wie hier dokumentiert:
top - 11:54:34 up 26 min, 2 users, load average: 1.53, 1.27, 0.85 Tasks: 77 total, 1 running, 76 sleeping, 0 stopped, 0 zombie %Cpu(s): 7.2 us, 15.4 sy, 0.0 ni, 71.9 id, 0.0 wa, 0.0 hi, 5.5 si, 0.0 st MiB Mem : 368.4 total, 222.4 free, 73.5 used, 72.5 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 244.2 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 527 root 20 0 0 0 0 I 8.1 0.0 0:00.48 kworker/u2:2-brcmf_wq/mmc1:0001:1 435 pi 20 0 120260 20208 8232 S 7.8 5.4 1:56.07 python3 301 pi 20 0 9944 2528 2072 S 7.5 0.7 2:00.87 wiopi 526 root 20 0 0 0 0 I 2.9 0.0 0:00.61 kworker/0:1-events 521 pi 20 0 10280 2972 2516 R 1.3 0.8 0:01.73 top
Link zum Stream:
http://<zero-name>:8081
Mobile
Funktion 8 kann zum aktivieren und deaktivieren der CAM verwendet werden.
I2C-Slaves
WIOpi unterstützt bis zu 4 I2C-Slaves.
Die resertvierten I2C-Geräte-Adressen sind 0x7C
, 0x7D
, 0x7E
und 0x7F
.
UM einen Stift auf einem Slave zu adressieren sind diese Parameter beteiligt:
- Node ID: Die ID des WIOpi
- Adresse: Stift-Nummer
- Port: Slave I2C ID
Unterstützte Rocrail-Objekte:
- Digitaler Ausgang
Monitor-Trace DOUT(0x0A) on Pin 5(data[0]) off(data[1]):
opc=0x0A dlc=5 data=05 00 00 00 7C 00 00 00
Zehn mal je Sekunde werden die Slaves auf den Eingangsstatus der Stifte gepollt. (Falls definiert.)
20210105.083513.532 w9999I main OWire 0187 I2C device found at 0x7C 20210105.083513.542 w9999I main ODisplay 0392 init SSD1306 device 0x3C geometry=3 ... 20210105.083513.886 w9999I doManage OManager 0101 read reg array slave 0x7C rc=2: opc=0x99 11 66
- Hinweis 1: Der Arduino Nano kann keine fehlerfreie I2C-Geschwindigkeit oberhalb der standardmäßigen 100kHz verarbeiten.
CAN Slaves
Der USBtin CAN-Adapter kann verwendet werden, um CANGC2- und CANGC6-Module einzubinden.
Die CANGC-Module müssen wie folgt programmiert werden:
- Long events (Short events deaktivieren)
- Die Node-Nr. muss gleich der CAN-ID des Moduls eingestellt werden
- Die Event-Nr. muss gleich der korrespondierenden Portnummer (1…16) eingestellt werden
- SoD 4711
Die Programmierung muss durch die RCAN-Bibliothek in Rocrail erfolgen; Es ist nicht möglich CANGCx über WIOpi zu programmieren. Hierfür kann die gleiche USBtin verwendet werden.
Eisnstell-Beispiele
Rocrail-Adressierung
Objekt | Node-ID | Adresse | Port |
---|---|---|---|
Rückmelder | WIOpi Node-ID | Event-Nr. + (Node Nr. * 256) | - |
Ausgang/Servo | WIOpi Node-ID | Event-Nr. | Node-Nr. |
Benutzer-Stift-Definitionen
Um Stifte für Pi01, Schrittmotoren und Mobil neu zuzuordnen, können die folgenden untergeordneten Knoten in der wiopi.ini
verwendet werden:
<wiopi server="localhost"> <pindef fn="PWM" nr="12"/> <pindef fn="IN1" nr="7"/> </wiopoi>
Das nr-Attribut ähnelt der Anschlussnummer, nicht dem GPIO.
Name(fn) | Beschreibung | Bemerkung |
---|---|---|
LED1 | Pi01 LED1 Ausgang | |
LED2 | Pi01 LED2 Ausgang | |
Button | Pi01 Taster Eingang | |
IN1 | Schrittmotor IN1 Ausgang | 3W Clock |
IN2 | Schrittmotor IN2 Ausgang | 3W Dir |
IN3 | Schrittmotor IN3 Ausgang | 3W Enable |
IN4 | Schrittmotor IN4 Ausgang | |
CAL | Schrittmotor calibration input | |
PWM | Mobil PWM Ausgang | |
FWD | Mobil Forwärts Impuls Ausgang | |
REV | Mobil Rückwärts Ipuls Ausgang | |
LIGHTS1 | Mobil Licht Cab 1 Ausgang | |
LIGHTS2 | Mobil Licht Cab 2 Ausgang |
Auto-Server-Verbinden
WIOpi verwendet den R2RNet-Dienst um den Rocrail-Server im LAN zu erkennen.
Dieser Dienst muss in den Server-Einstellungen aktiviert sein.
Wenn Auto-Server-Verbinden nict funktioniert (z.B. wenn der Router UDP-Multicast nicht unterstützt) kann die Rocrail-Server-IP oder der Name zur wiopi.ini hinzugefügt werden:
<wiopi server="insert the server ip here" nid="99" nodename="WIOpi">
WIOpi muss gestoppt werden, bevor diese Datei editiert wird:
sudo killall wiopi
Info-Ebene
Die startwiopi.sh
kann mit sudo nano startwiopi.sh
editiert werden
-info
hinter ./wiopi
für Informationen hinzufügen:
#!/bin/sh cd /home/pi/WIOpi sudo ./wiopi -info
Dies sollte aufgrund der CPU-Auslastung nur zu Testzwecken erfolgen.
Mobil-Doppel-Motor
Lokomotiven mit zwei Motoren benötigen Unterstützung durch zwei H-Brücken.
Die "dualmotor"-Option in der wiopi.ini
auf "true" einstellen aktiviert das.
Die zweite H-Brücke mit I/O2-Anschluss, Stift 4, 5 und 6 verbinden.
Der WIO-Drive, ohne ESP, kann als zweite H-Brücke verwendet werden. Nur die Bauteile montieren, die zur Steuerung der H-Brücke benötigt werden. Den Gleichrichter nicht montieren, aber verdrahten.
I/O2 | H-Brücke | Rpi-Anschl. | WIODrive |
---|---|---|---|
2 | GND | 25 | IBB1-3 |
4 | IN2 | 29 | IBB1-2 |
5 | IN1 | 31 | IBB1-1 |
6 | ENA | 35 | ESC1-3 |