wio:wiopi-en
no way to compare when less than two revisions
Differences
This shows you the differences between two versions of the page.
| — | wio:wiopi-en [2025/03/17 19:25] (current) – created - external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | [[: | ||
| + | ====== WIOpi ====== | ||
| + | [[: | ||
| + | **[[: | ||
| + | * [[: | ||
| + | * [[: | ||
| + | * [[: | ||
| + | * [[: | ||
| + | * [[: | ||
| + | * [[: | ||
| + | \\ | ||
| + | |||
| + | {{: | ||
| + | \\ | ||
| + | | Before mounting the header on the Zero, check this [[: | ||
| + | |||
| + | |||
| + | < | ||
| + | \\ | ||
| + | =====PiOS Versions===== | ||
| + | ^ Version ^ Remark ^ Date ^ | ||
| + | | PiOS 11 ' | ||
| + | | PiOS 12 ' | ||
| + | --></ | ||
| + | |||
| + | |||
| + | \\ | ||
| + | =====Introduction===== | ||
| + | WIOpi is a program targeted for the Raspberry Pi and its GPIO. (Model 1, 2, 3, 4 and ZeroW.)\\ | ||
| + | The hardware requirements and support are the same as for __**[[: | ||
| + | By running the WIOpi program on the Raspberry Pi, it will behave and process like a WIO on ESP base.\\ | ||
| + | |< >| | ||
| + | ^ WIOpi runs in context of user **pi**. ^\\ | ||
| + | //The user **pi** is default in the groups **gpio**, **i2c** and **spi**, so no need to run WIOpi in super user context.// \\ | ||
| + | **Note**: Type mobile should run in root context to be able to run a high performance motor thread.\\ | ||
| + | < | ||
| + | $ 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 | ||
| + | </ | ||
| + | |||
| + | The commands to start and stop the cam.py Python script can be specified in the wiopi.ini.\\ | ||
| + | Defauls are: | ||
| + | < | ||
| + | <var name=" | ||
| + | <var name=" | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | =====Supported Boards===== | ||
| + | * Raspberry ZeroW 1 and 2 | ||
| + | * Raspberry Pi 1, 2, 3 and 4 | ||
| + | |||
| + | |||
| + | \\ | ||
| + | |||
| + | =====Install===== | ||
| + | Activate **I2C**, **SPI** and **Serial Port** in the raspi-conf utility.\\ | ||
| + | < | ||
| + | cd | ||
| + | mkdir WIOpi | ||
| + | cd WIOpi | ||
| + | wget https:// | ||
| + | tar xf WIOpi-ARMHF.tar.gz | ||
| + | rm WIOpi-ARMHF.tar.gz | ||
| + | </ | ||
| + | Add a crontab task: | ||
| + | < | ||
| + | @reboot / | ||
| + | </ | ||
| + | //The ARMHF build runs also under PiOS 64bit. (ARM64)//\\ | ||
| + | |||
| + | |||
| + | ====Swap Size==== | ||
| + | The default swap size of 100MB ist for a Zero with 512MB memory not enough.\\ | ||
| + | <code bash> | ||
| + | sudo nano / | ||
| + | </ | ||
| + | Change the swap size to 1024: | ||
| + | <code bash> | ||
| + | CONF_SWAPSIZE=1024 | ||
| + | </ | ||
| + | Restart the service: | ||
| + | <code bash> | ||
| + | sudo / | ||
| + | sudo / | ||
| + | </ | ||
| + | \\ | ||
| + | =====Command Line Options===== | ||
| + | ^ Option ^ Description ^ | ||
| + | | -info | set trace level info | | ||
| + | | -t < | ||
| + | | -server <ip> | Rocrail server IP or DNS name ¹| | ||
| + | | -id < | ||
| + | | -softpwm | Use software PWM for servos to enable play sound. | | ||
| + | |||
| + | |||
| + | \\ | ||
| + | ¹ If WIOpi and the Rocrail server are operated on the same Raspberry pi, enter **localhost**. For autostart, enter the option in startwiopi.sh. | ||
| + | |||
| + | =====Pinout===== | ||
| + | The Pinout and mapping is printed in the console after startup.\\ | ||
| + | It depends on the configuration found in the wiopi.ini.\\ | ||
| + | See for Raspberry Pi Pinout information: | ||
| + | More detailed info: https:// | ||
| + | Or issue in a terminal the pinout command.\\ | ||
| + | |||
| + | \\ | ||
| + | =====Supported Hardware===== | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * __**[[: | ||
| + | * Mobile soft PWM for controlling a DC Motor, MOSFET or H-Bridge. ((//WIOpi must be started with sudo to generate a good quality PWM.// | ||
| + | * WS2801 RGB LEDs over SPI (Output address > 128) | ||
| + | * LEDScript support in case Port Type is set to Macro. | ||
| + | * 2 Servos on the hardware PWM pins (phys. 32 & 33 - address 129 and 130). ((//WIOpi must be started with sudo to be able to use the PWM outputs.// | ||
| + | * Analog inputs: PCF8591 | ||
| + | |||
| + | **Note:** //The WIOpi only saves servo positions in case of a shutdown.// | ||
| + | |||
| + | \\ | ||
| + | =====Onboard Servos===== | ||
| + | The two onboard servos have address 129 and 130.\\ | ||
| + | Mobile functions 1 and 2 are mapped to those onboard servo addresses.\\ | ||
| + | **Note:** //The WIOpi only saves servo positions in case of a shutdown.// | ||
| + | |||
| + | |||
| + | \\ | ||
| + | =====Sound===== | ||
| + | The Servo outputs, PWM0 and PWM1, can also be used for audio: | ||
| + | < | ||
| + | dtoverlay=pwm-2chan, | ||
| + | </ | ||
| + | The filter is quit simple: (Example is for just one channel, and not tested.) | ||
| + | < | ||
| + | 1µ | ||
| + | || | | ||
| + | Servo0 -+---+----|| |----+ | ||
| + | | | ||
| + | | ||
| + | |1| --- | ||
| + | |5| --- 33n | ||
| + | | ||
| + | | ||
| + | | | ||
| + | GND -+---+------------+ | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | \\ | ||
| + | =====Pi01===== | ||
| + | ==== LED functions ==== | ||
| + | Both LEDs will flash fast on a **show** command to identify itself.\\ | ||
| + | Another **show** command will stop this flashing.\\ | ||
| + | |||
| + | ^ LED1 (green) | ||
| + | | Off | WIOpi does not run, or no GPIO access granted. | ||
| + | | Slow flash | Normal function. | ||
| + | | Fast flash | No Rocrail server connection. | ||
| + | \\ | ||
| + | |||
| + | ^ LED2 (red) ^ Description ^ | ||
| + | | Off | Idle communication. | ||
| + | | Flash | Packet received. | | ||
| + | \\ | ||
| + | ==== Pushbutton ==== | ||
| + | In case both LEDs are flashing to identify itself, it will stop this mode.\\ | ||
| + | Otherwise it sends a query response to the Server.\\ | ||
| + | |||
| + | \\ | ||
| + | =====Signals on Pi02/ | ||
| + | __**[[: | ||
| + | |||
| + | **Pi08**: 1...128 \\ | ||
| + | **Pi02**: 1...128 \\ | ||
| + | **WS2801**: 129...256 (mapped on 1...128) \\ | ||
| + | |||
| + | \\ | ||
| + | ===== ID12LA RFID Reader ===== | ||
| + | The default serial device is ''/ | ||
| + | < | ||
| + | serialdev="/ | ||
| + | </ | ||
| + | |< >| | ||
| + | ^ Raspberry pi Model ^ PiOS 10 ^ PiOS 11 ^ | ||
| + | | Zero 1 | / | ||
| + | | Rpi 1 | / | ||
| + | | Zero 2 | /dev/ttyS0 | / | ||
| + | | Rpi 2...4 | /dev/ttyS0 | | ||
| + | |||
| + | **Note:** //Seems to be PiOS version dependent; Check the system.//\\ | ||
| + | |||
| + | \\ | ||
| + | =====Stepper Control===== | ||
| + | See for turntable setup: __**[[: | ||
| + | {{ : | ||
| + | |< >| | ||
| + | | 4 Wire ||| | ||
| + | ^ Function ^ Header ^ GPIO ^ | ||
| + | | IN1 (Coil 1) | 27 | 0 | | ||
| + | | GND | 9 | - | | ||
| + | | IN2 (Coil 2) | 29 | 5 | | ||
| + | | IN3 (Coil 3) | 31 | 6 | | ||
| + | | IN4 (Coil 4) | 35 | 19 | | ||
| + | | HALL (Calibrate) | 37 | 26 | | ||
| + | \\ | ||
| + | |||
| + | {{ : | ||
| + | |< >| | ||
| + | | 3 Wire ||| | ||
| + | ^ Function ^ Header ^ GPIO ^ Example TB6600 ^ | ||
| + | | STEP(Clock) | 27 | 0 | CLK+ | | ||
| + | | GND | 9 | - | EN-, DIR-, CLK- | | ||
| + | | DIR | 29 | 5 | DIR+ | | ||
| + | | ENABLE | 31 | 6 | EN+ | | ||
| + | | HALL (Calibrate) | 37 | 26 | | ||
| + | {{ : | ||
| + | |||
| + | |||
| + | \\ | ||
| + | =====WS2801===== | ||
| + | |< >| | ||
| + | ^ WS2801 ^ Header ^ I/O1 ^Function ^ | ||
| + | | DI | 19 MOSI | 6 | Digital In | | ||
| + | | CI | 23 SCLK | 8 | Clock In | | ||
| + | | GND | 25 GND | 2 | Ground | | ||
| + | |||
| + | ====Output settings for LEDScript==== | ||
| + | Address > 128 or count, ON Parameter, is set to zero.\\ | ||
| + | Options Color, Type Macro.\\ | ||
| + | |||
| + | \\ | ||
| + | =====WIOpi-01===== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | ====Files==== | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | |||
| + | \\ | ||
| + | =====CAM===== | ||
| + | The CAM can be used parallel with WIOpi as documented here: | ||
| + | * __**[[: | ||
| + | |||
| + | < | ||
| + | top - 11:54:34 up 26 min, 2 users, | ||
| + | Tasks: | ||
| + | %Cpu(s): | ||
| + | MiB Mem : 368.4 total, | ||
| + | MiB Swap: 0.0 total, | ||
| + | |||
| + | PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND | ||
| + | 527 root 20 | ||
| + | 435 pi 20 | ||
| + | 301 pi 20 | ||
| + | 526 root 20 | ||
| + | 521 pi 20 | ||
| + | </ | ||
| + | |||
| + | Link to stream: | ||
| + | < | ||
| + | http://< | ||
| + | </ | ||
| + | |||
| + | ====Mobile==== | ||
| + | Function 8 can be used to activate and deactivate the CAM.\\ | ||
| + | |||
| + | |||
| + | \\ | ||
| + | =====I2C Slaves===== | ||
| + | WIOpi supports up to 4 I2C Slaves.\\ | ||
| + | The reserved I2C device addresses are 0x7C, 0x7D, 0x7E and 0x7F.\\ | ||
| + | |||
| + | To address a pin on a slave, the following parameters are involved: | ||
| + | * Node ID: The ID of the WIOpi | ||
| + | * Address: Pin number | ||
| + | * Port: Slave I2C ID | ||
| + | |||
| + | Supported Rocrail objects: | ||
| + | * Digital output | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | \\ | ||
| + | Ten times a second, the slaves are polled for their input pin state. (If any defined.)\\ | ||
| + | < | ||
| + | 20210105.083513.532 w9999I main | ||
| + | 20210105.083513.542 w9999I main | ||
| + | ... | ||
| + | 20210105.083513.886 w9999I doManage OManager 0101 read reg array slave 0x7C rc=2: opc=0x99 11 66 | ||
| + | </ | ||
| + | |||
| + | |||
| + | * **Note 1:** //The Arduino Nano cannot handle error free I2C speeds above the default 100kHz.//\\ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | \\ | ||
| + | |||
| + | |||
| + | =====CAN Slaves===== | ||
| + | The [[https:// | ||
| + | The CANGC modules must be programmed as follows: | ||
| + | * Long events (deselect Short events) | ||
| + | * The Node Nr. must be set equal to the module its CAN ID | ||
| + | * The Event Nr. must be set equal to the corresponding port number (1...16) | ||
| + | * SoD 4711 | ||
| + | :!: //The programming must be done by the RCAN library in Rocrail; It is not possible to program CANGCx over WIOpi. The same USBtin can be used for this purpose.// | ||
| + | \\ | ||
| + | ====Setup examples==== | ||
| + | {{: | ||
| + | {{: | ||
| + | ====Rocrail Addressing==== | ||
| + | ^ Object ^ Node ID ^ Address ^ Port ^ | ||
| + | | Sensor | WIOpi Node ID | Event Nr. + (Node Nr. * 256) | - | | ||
| + | | Output/ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | \\ | ||
| + | |||
| + | =====User Pin Definitions===== | ||
| + | To remap pins for Pi01, Stepper and Mobile, the following child nodes in the '' | ||
| + | |||
| + | <code xml> | ||
| + | <wiopi server=" | ||
| + | <pindef fn=" | ||
| + | <pindef fn=" | ||
| + | </ | ||
| + | </ | ||
| + | The **nr** attribute resembles the connector number, __not__ the GPIO.\\ | ||
| + | |||
| + | ^ Name(fn) ^ Description ^ Remark ^ | ||
| + | | LED1 | Pi01 LED1 output | | ||
| + | | LED2 | Pi01 LED2 output | | ||
| + | | Button | Pi01 Button input | | ||
| + | | IN1 | Stepper IN1 output | 3W Clock | | ||
| + | | IN2 | Stepper IN2 output | 3W Dir | | ||
| + | | IN3 | Stepper IN3 output | 3W Enable | | ||
| + | | IN4 | Stepper IN4 output | | ||
| + | | CAL | Stepper calibration input | | ||
| + | | PWM | Mobile PWM output | | ||
| + | | FWD | Mobile forwards relay pulse output | | ||
| + | | REV | Mobile reverse relay pulse output | | ||
| + | | LIGHTS1 | Mobile lights Cab 1 output | | ||
| + | | LIGHTS2 | Mobile lights Cab 2 output | | ||
| + | |||
| + | \\ | ||
| + | |||
| + | =====Auto Server Connect===== | ||
| + | WIOpi use the __**[[: | ||
| + | This service must be __**[[: | ||
| + | \\ | ||
| + | If Auto Server Connect doesn' | ||
| + | <code xml> | ||
| + | <wiopi server=" | ||
| + | </ | ||
| + | WIOpi should be stopped before editing this file: | ||
| + | < | ||
| + | sudo killall wiopi | ||
| + | </ | ||
| + | \\ | ||
| + | \\ | ||
| + | |||
| + | =====Info Level===== | ||
| + | You can edit the startwiopi.sh with sudo nano startwiopi.sh \\ | ||
| + | Add -info behind ./wiopi for information: | ||
| + | < | ||
| + | #!/bin/sh | ||
| + | cd / | ||
| + | sudo ./wiopi -info | ||
| + | </ | ||
| + | This should only be done for testing because of cpu utilization | ||
| + | =====Mobile Dual Motor===== | ||
| + | Locomotives with dual motors require dual H-Bridge support.\\ | ||
| + | Set the " | ||
| + | The second H-Bridge connects to the I/O2 connector on pin 4, 5 and 6.\\ | ||
| + | The __**[[: | ||
| + | |< >| | ||
| + | ^ I/O2 ^ H-Bridge ^ Rpi Conn ^ WIODrive ^ | ||
| + | | 2 | GND | 25 | IBB1-3 | | ||
| + | | 4 | IN2 | 29 | IBB1-2 | | ||
| + | | 5 | IN1 | 31 | IBB1-1 | | ||
| + | | 6 | ENA | 35 | ESC1-3 | | ||
| + | |||
wio/wiopi-en.txt · Last modified: 2025/03/17 19:25 by 127.0.0.1