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