User Tools

Site Tools


wio:wiopi-de

WIOpi

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 &amp;"/>
    <var name="stopcam" vt="string" defval="killall python3"/>


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)


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.


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


Unterstützte Hardware

  • Pi02 (max. 4 = 128 I/O)
  • Pi03 (max. 8 = 128 Servos - Adresse 1-128) 1)
  • 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 Serielles Gerät
Zero 1 /dev/ttyAMA0
Rpi 1 /dev/ttyAMA0
Zero 2 /dev/ttyS0
Rpi 2…4 /dev/ttyS0


Schritt-Motor-Steuerung

Für Drehscheiben-Einstellungen siehe: WIO-Schritt-Motor
img_20201213_122942_0.jpg

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


3w-wired.jpg

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

qsh4218-35-10-027.jpg


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

cangc2-setup-wiopi-slave.jpg
cangc6-setup-wiopi-slave.jpg

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
1)
Der WIOpi speichert Servo-Positionen nur im Fall eines shutdown.
2)
WIOpi muss mit sudo gestartet sein, um eine qualitativ gute PWM zu erzeugen.
3)
WIOpi muss mit sudo gestartet sein, um die PWM-Ausgänge nutzen zu können.
wio/wiopi-de.txt · Last modified: 2022/03/04 00:48 by rainerk