Table of Contents

WIOpi

Vue d'ensemble WIO


zero.jpg

Avant de monter le connecteur sur le Zero, vérifier ceci WIOpi-01


Introduction

WIOpi est un programme ciblé pour le Raspberry Pi et ses GPIO. (Modèle 1, 2, 3, 4 et ZeroW.)
Les exigences matérielles et le support sont les même que pour le RocNetNode.
En faisant fonctionner le programme WIOpi sur le Raspberry Pi, il se comportera et traitera comme un WIO sur base ESP.

WIOpi s'exécute dans le contexte de l'utilisateur pi.

L'utilisateur pi est par défaut dans les groupes gpio, i2c et spi, donc pas besoin d'exécuter WIOpi dans un contexte de super utilisateur.
Note: Le type mobile devra fonctionner dans le contexte root pour être capable marcher dans un processus moteur haute performance.

$ groups
pi adm dialout cdrom sudo audio video plugdev games users input netdev gpio i2c spi

Les fichiers suivants et les répertoires sont extraits:

.
├── cam
│   └── cam.py
├── reboot.sh
├── scripts
│   └── Disco00.led
├── startwiopi.sh
├── update.sh
└── wiopi

Les commandes pour démarrer et arrêter le script Python cam.py peuvent être spécifiées dans le fichier wiopi.ini.
Les valeurs par défaut sont:

    <var name="startcam" vt="string" defval="nohup python3 cam/cam.py &amp;"/>
    <var name="stopcam" vt="string" defval="killall python3"/>


Cartes supportées


Installation

Activer l'I2C, le SPI et l'UART dans l'utilitaire raspi-conf.

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

Ajouter une tâche crontab:

@reboot /home/pi/WIOpi/startwiopi.sh

La version ARMHF fonctionne également sous PiOS 64bit. (ARM64)

Taille du Swap

La taille du fichier swap par défaut est de 100MB pour un Zero avec 512MB de mémoire n'est pas suffisant.

sudo nano /etc/dphys-swapfile

Changer la taille du swap à 1024:

CONF_SWAPSIZE=1024

Redémarrer le service:

sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start


Options en Ligne de Commande

Option Description
-info définir les informations de niveau de suivi
-t <filename> nom du fichier de suivi
-server <ip> Adresse IP du serveur Rocrail ou nom DNS ¹
-id <1…255> Identifiant du Nœud WIOpi
-softpwm Utilisation PWM logiciel des servos pour être capable de jouer des sons.


¹ Si WIOpi et le serveur Rocrail fonctionnent sur le même Raspberry pi, entrez localhost. Pour le démarrage automatique, entrez l'option dans le fichier startwiopi.sh.

Brochage

Le brochage et la cartographie est affiché dans la console après le démarrage.
Cela dépend de la configuration trouvée dans le fichier wiopi.ini.
Voir les informations sur le brochage du Raspberry Pi: https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
Ou émettez dans un terminal la commande pinout.


Matériel supporté

Note: Le WIOpi enregistre uniquement les positions des servos en cas d'un arrêt.


Servos embarqués

Les deux servos embarqués ont pour adresse 129 et 130.
Les fonctions mobile 1 et 2 sont mappés à ces adresses de servos embarquées.
Note: Le WIOpi enregistre uniquement les positions des servos en cas d'un arrêt.


Son

Les sorties servo, PWM0 et PWM1, peuvent également être utilisé pour l'audio:

dtoverlay=pwm-2chan,pin=12,func=2,pin2=13,func2=4

Le filtre est assez simple: (L'exemple est juste pour un canal, et non testé.)

                  1µ
                 || | 
Servo0 -+---+----|| |----+
        |   |    || |    |   /|
       +-+  |            |  / |
       |1| ---         +---+  |
       |5| --- 33n     |   |  |
       |0|  |          |   |  |
       +-+  |          +---+  |
        |   |            |  \ |
   GND -+---+------------+   \|


Pi01

Les fonctions LED

Les deux LED clignotent rapidement sur une commande show pour s'identifier lui-même.
Une autre commande show arrêtera le clignotement.

LED1 (vert) Description
Off WIOpi ne fonctionne pas, ou pas d’accès autorisé GPIO.
Clignotement lent Fonctionnement normal.
Clignotement rapide Pas de connexion au serveur Rocrail.


LED2 (rouge) Description
Off Communication inactive.
Clignotement Paquets reçus.


Bouton poussoir

Au cas où les deux voyants clignotent pour s'identifier, cela arrêtera ce mode.
Sinon, il envoie une réponse de requête au serveur.


Signaux sur Pi02/Pi08/WS2801

Le Support des signaux est également disponible sur le Pi02, dans le cas ou aucun Pi08 n'est connecté.

Pi08: 1…128
Pi02: 1…128
WS2801: 129…256 (mappé sur 1…128)


Lecteur RFID ID12LA

Le périphérique série par défaut est /dev/ttyS0, et peut être changé dans le fichier wiopi.ini:

serialdev="/dev/ttyAMA0"
Modèle de Raspberry pi PiOS 10 PiOS 11
Zero 1 /dev/ttyAMA0
Rpi 1 /dev/ttyAMA0
Zero 2 /dev/ttyS0 /dev/ttyAMA0
Rpi 2…4 /dev/ttyS0

Note: Semble dépendre de la version de PiOS; Vérifier le système.


Contrôle moteur pas à pas

Voir pour le réglage du pont tournant: WIO Moteur pas à pas
img_20201213_122942_0.jpg

4 fils
Fonction Connecteur GPIO
IN1 (Bobine 1) 27 0
GND 9 -
IN2 (Bobine 2) 29 5
IN3 (Bobine 3) 31 6
IN4 (Bobine 4) 35 19
HALL (Calibration) 37 26


3w-wired.jpg

3 fils
Fonction Connecteur GPIO Exemple TB6600
STEP(Horloge) 27 0 CLK+
GND 9 - EN-, DIR-, CLK-
DIR 29 5 DIR+
ENABLE 31 6 EN+
HALL (Calibration) 37 26

qsh4218-35-10-027.jpg


WS2801

WS2801 Connecteur I/O1 Fonction
DI 19 MOSI 6 Entrée Numérique
CI 23 SCLK 8 Entrée Horloge
GND 25 GND 2 Masse

Réglages de sortie pour LEDScript

Adresse > 128 ou compteur, Paramètre ON, est réglé à zéro.
Options Couleur, Type Macro.


WIOpi-01

Fichiers

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

Le CAM peut être utilisé en parallèle avec WIOpi comme documenté ici:

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                                                                                  

Lien vers la diffusion:

http://<zero-name>:8081

Mobile

La fonction 8 peut être utilisée pour activer et désactiver le CAM.


Esclaves I2C

WIOpi prend en charge jusqu'à 4 esclaves I2C.
Les adresses du dispositif I2C réservé sont0x7C, 0x7D, 0x7E et 0x7F.

Pour adresser une broche sur un esclave, les paramètres suivants sont appliqués:

Les objets Rocrail supportés:

La trace du moniteur DOUT(0x0A) sur la broche 5(data[0]) off(data[1]):

opc=0x0A dlc=5 data=05 00 00 00 7C 00 00 00


Dix fois par seconde, les esclaves sont interrogés pour l'état de leur broche d'entrée. (Si tout défini.)

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

Esclaves CAN

L'adaptateur CAN USBtin peut être utilisé pour inclure les modules CANGC2 et CANGC6.
Les modules CANGC doivent être programmés comme suit:

:!: La programmation doit être faite par la bibliothèque RCAN dans Rocrail; Il n'est pas possible de programmer le CANGCx à travers le WIOpi. Le même USBtin peut être utilisé à cette effet.

Exemples de configuration

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

Adressage Rocrail

Objet Identifiant du Nœud Adresse Port
Détecteur Identifiant du nœud WIOpi Numéro d'évènement + (Numéro du nœud * 256) -
Sortie/Servo Identifiant du nœud WIOpi Numéro d'évènement Numéro du nœud


Définitions des broches utilisateur

Pour réassigner les broches pour Pi01, du Contrôle pas à pas et Mobile, les nœuds enfant suivants dans le wiopi.ini peuvent être utilisé:

<wiopi server="localhost">
  <pindef fn="PWM" nr="12"/>
  <pindef fn="IN1" nr="7"/>
</wiopoi>

L'attribut nr ressemble au numéro de connecteur, pas au GPIO.

Nom(fn) Description Remarque
LED1 Sortie LED1 Pi01
LED2 Sortie LED2 Pi01
Button Entrée du bouton Pi01
IN1 Sortie pas à pas IN1 Horloge 3W
IN2 Sortie pas à pas IN2 Direction 3W
IN3 Sortie pas à pas IN3 Activer 3W
IN4 Sortie pas à pas IN4
CAL Entrée calibration pas à pas
PWM Sortie PWM Mobile
FWD Sortie impulsion relais Mobile avant
REV Sortie impulsion relais Mobile inversé
LIGHTS1 Sortie éclairage Mobile cab 1
LIGHTS2 Sortie éclairage Mobile Cab 2


Connexion automatique au serveur

WIOpi utilise le service R2RNet pour détecter le serveur Rocrail sur le réseau.
Ce service doit être activé dans les réglages du serveur.

Si la connexion automatique au serveur ne fonctionne pas (par exemple le routeur ne supporte pas le Multicast UDP) l'IP du serveur Rocrail ou le Nom peuvent être ajoutés au fichier wiopi.ini:

<wiopi server="insert the server ip here" nid="99" nodename="WIOpi">

WIOpi devra être arrêter avant d'éditer ce fichier:

sudo killall wiopi


Niveau d'information

Vous pouvez éditer le fichier startwiopi.sh avec sudo nano startwiopi.sh
Ajoutez -info derrière ./wiopi pour plus d'information:

#!/bin/sh
cd /home/pi/WIOpi
sudo ./wiopi -info

Cela doit être fait uniquement pour tester à cause de la charge d'utilisation du processeur.

Moteur Double Mobile

Les locomotives avec deux moteurs nécessite le supprt de deux pont en H.
Réglez l'option "dualmotor" à "true" dans le fichier wiopi.ini pour activer cela.
Le second pont en H branché au connecteur I/O2 sur les broches 4, 5 et 6.
Le WIO-Drive, sans ESP, peut être utilisé comme second pont en H. Montez seulement ces éléments nécessaire pour contrôler le pont en H. Ne pas mettre le redresseur, mais le cabler.

I/O2 Pont en H Rpi Conn WIODrive
2 GND 25 IBB1-3
4 IN2 29 IBB1-2
5 IN1 31 IBB1-1
6 ENA 35 ESC1-3
1)
Le WIOpi enregistre uniquement les positions des servos en cas d'un arrêt.
2)
WIOpi doit être démarré avec "sudo" pour générer une bonne qualité PWM.
3)
WIOpi doit être démarré avec "sudo" pour être capable d'utiliser les sorties PWM.