User Tools

Site Tools


arduino:wio-en

Differences

This shows you the differences between two versions of the page.


Previous revision
arduino:wio-en [2025/05/21 07:30] (current) rjversluis
Line 1: Line 1:
 +[[:english|{{ :hardware.png}}]][[:english|{{ :rocrail-logo-32.png}}]]
 +[[:arduino:wio-fr|{{ icons:fr.png|French Version}}]][[:arduino:wio-de|{{ icons:de.png|Deutsche Version}}]][[:arduino:wio-en|{{ icons:uk.png|English Version}}]]
 +====== WIO Firmware ======
 +[[:wio:overview-en|{{ :wio:wiologo.png}}]]
 +[[:english|Content]] -> [[:arduino:wio-overview-en|WIO Overview]]
 +  * [[:arduino:wio-overview-en|WIO Overview]] | [[:arduino:wio-setup-en|WIO Setup]] | [[:arduino:wioctrl-en|WIO Control]] | [[:arduino:amp-en|User Bitmaps]] | **[[:arduino:wio-en|WIO Firmware]]** | [[:wio:wio-ledscript-en|LEDScript]] | [[:wio:wio-ioscript-en|IOScript]]
 +  * [[:arduino:wio-rascii-en|WIO RASCII]] | [[:arduino:wio-canprot-en|WIO CAN Protocol]]
 +  * [[https://i2cdevices.org/addresses|I2C Device Addresses]]
 +  * [[:arduino:esp32-api3-en|ESP32 API 3.x]]
 +
 + \\
 +=====Introduction=====
 +This project is targeted to the ESP8266, ESP32 and RP2040((Raspberry Pi PicoW)) platforms.\\
 +The source code is only available to be able to flash it on the target device if no other method is possible.\\
 +Forking or manipulating the source code is NOT allowed and is protected by copyright.\\
 +
 +It can be used as:
 +  * Wireless Throttle
 +or as wireless I/O with:
 +  * 32 I2C I/O [[:hardware-en#extension_units|GCA compatible]] 
 +  * 2 Displays SSD1306
 +and one of the following extra functions:
 +  - LED control WS2812
 +  - 4 Servos
 +  - 2 RC522 readers
 +  - DCC Generator
 +  - Mobile PWM, direction and lights
 +and one of the following options:
 +  * ID12LA 125kHz RFID reader on RX
 +  * RailCom reader on RX
 +
 +====Supported Boards====
 +  * Raspberry Pi Pico W -> recommended 
 +  * Lolin D1 Mini
 +  * Lolin D32
 +  * ESP32 Dev Module
 +  * ESP32 D1 Mini
 +
 +====Used Pins====
 +Check the pin mapping in Pins.cpp:
 +  * Pins.cpp
 +
 +====Flyer====
 +  * {{:wio:wio-2.pdf|WIO-2}}
 +
 + \\
 +=====Attention=====
 +{{ :arduino:wifi-analyse.jpg?300|Exhibition used WiFi channels...}}
 +  - The Rocrail server must run on a PC which does __not__ automatically suspend or sleep in case of no user activity. Check the energy setting to prevent communication loss.
 +  - __The used WiFi Router should be state of the art; Only use maintained hardware.__
 +  - Make sure the SSID is not visible to prevent extra public traffic.
 +
 +^ Using WIO is at your own risk. \\ Peter Giling and Robert Jan Versluis can not be held responsible for any damage or problems by using the proposed hard- and firmware. \\ The published hardware are prototypes, are incomplete and not ready for release. \\ Only original GCA Kits are supported. ^
 +
 +
 +
 + \\
 +=====Arduino IDE=====
 +Prepare the Arduino IDE with the following boards and libraries:
 +====Boards Manager=====
 +Add in the preference dialog to "Additional Boards Manager" the following URL's:
 +<code>
 +https://arduino.esp8266.com/stable/package_esp8266com_index.json
 +https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
 +</code>
 +
 +{{ :arduino:board-manager-en.png?300}}
 +And install the ESP8266 and ESP32 Boards.\\
 +====Board selection====
 +{{ :arduino:lolin-ide-board.png?240}}
 +''LOLIN(WEMOS)D1 R2 & mini''\\
 +
 +====Libraries====
 +===ESP8266 & ESP32===
 +  * ESP8266 (Board Manager)
 +  * Adafruit NeoPixel (WS2812)
 +  * RotaryEncoder
 +  * MFRC522 (RC522)
 +  * Servo
 +  * ArduinoOTA
 +  * mcp_can 
 +    * https://github.com/coryjfowler/MCP_CAN_lib
 +    * [[:arduino:rcan-en#modifications|MCP_CAN modifications]]
 +  * SparkFun APDS9960 RGB and Gesture Sensor \\ Line 198 in the Arduino/libraries/SparkFun_APDS9960.h must be changed from NA_STATE into NO_STATE because it conflicts with the WiFi RP2040 library. This Enum value ist not used in the Arduino/libraries/SparkFun_APDS9960.cpp. (implementation)
 +
 +__**MFRC522 Bugfix**__\\
 +Replace in MFRC522Extended.cpp on line 824 and 847:\\
 +<code C++> 
 +if (backData && (backLen > 0))
 +</code>
 +with <code C++> 
 +if (backData && (backLen != NULL))
 +</code>
 +
 +
 +===ESP32===
 +To compile WIO 
 +  * Board esp32 -> 2.0.17
 +
 +  * ESP32 (Board Manager) -> :!: WIO does NOT support ESP32 version 3.x; The API not compatible with 2.x. :!: ((https://docs.espressif.com/projects/arduino-esp32/en/latest/migration_guides/2.x_to_3.0.html))
 +  * ESP32Servo
 +  * ESP32CAN
 +    * https://github.com/miwagner/ESP32-Arduino-CAN
 +
 +__**ESP32CAN Modifications**__\\
 +The ''xSemaphoreTake'' should timeout after 500ms instead of wait for ever.\\
 +Replace ''portMAX_DELAY'' with 500, and return the rc of the ''xSemaphoreTake'' function instead of zero. (CAN.c)
 +<code c>
 +int CAN_write_frame(const CAN_frame_t *p_frame) {
 + if (sem_tx_complete == NULL) {
 + return -1;
 + }
 +
 + // Write the frame to the controller
 + CAN_write_frame_phy(p_frame);
 +
 + // wait for the frame tx to complete
 + int rc = xSemaphoreTake(sem_tx_complete, 250);
 + return rc;
 +}
 +</code>
 +
 +| Just decreas "Upload Speed" to 460800 in case the sketch upload does show communication errors. |
 + \\
 +
 +====FileSystem====
 +Select 1M FS size:\\
 +{{:arduino:esp8266-fs-size.png?240}}\\
 +LittleFS is a file system which can be used in WIO for uploading user bitmaps and scripts.\\
 +Installing the Arduino IDE Plugin for uploading data:
 +  * https://github.com/esp8266/arduino-esp8266fs-plugin
 +
 +
 +=====WIO Sketch=====
 +| //Copyright (c) 2002-2025 Robert Jan Versluis, Rocrail.net// |
 +WIO is firmware for controlling all functions.\\
 +The source code is not public.\\
 +
 +
 + \\
 +====Binary====
 +{{ :arduino:esp-downloadtool.jpg?400}}{{ :arduino:espressif_flash_tool_chip.jpg?150}}{{ :arduino:espressif_flash_tool.jpg?300}}
 +Use the Espressif tool to upload the WIO Binary.
 +  * [[https://wiki.rocrail.net/rocrail-snapshot|WIO Binaries]]
 +  * [[https://www.espressif.com/en/support/download/other-tools|ESP Flash Download Tool]]
 +    * :!: Do not uncheck "DoNotChgBin"
 +
 +====Compile output====
 +The red FastLED pragma messages, which is information only, can be ignored, as long as the last two white lines show up:
 +<code>
 + #    pragma message "FastLED version 3.003.002"
 + #      pragma message "No hardware SPI pins defined.  All SPI access will default to bitbanged output"
 +
 +Sketch uses 293716 bytes (28%) of program storage space. Maximum is 1044464 bytes.
 +Global variables use 33104 bytes (40%) of dynamic memory, leaving 48816 bytes for local variables. Maximum is 81920 bytes.
 +</code>
 +
 +^ Pratfall: Many Micro USB cables do only provide 5V and no data, and cannot be used to program. ^
 +
 +
 +
 +Setting up the WiFi can be done with the Arduino Serial Monitor 115200 bps, or by modifying the [[#user_configuration|USERCNF.h]]:
 +<code>
 +#1CConnecting to [secure.home]
 +#13WiFi try to connect
 +...
 +#13WiFi try to connect
 +#17WiFi connected RSSI=-55
 +</code>
 +
 +Output after a ? command:\\
 +<code>
 +------------------------------
 +revision=458 WIO (c)Rocrail
 +192.168.100.175 RSSI=-52
 +battery=186
 +EEPROM size=3804
 +Free heap=174271
 +I/O state=00 00 00 00
 +------------------------------
 +SPIFFS total=1345kb used=0kb
 +file: Disco01.led size=110
 +------------------------------
 +Configuration:
 +------------------------------
 +ssid1=
 +pwd1=
 +ssid2=
 +pwd2=
 +server=
 +name=[local]
 +id=45
 +io=i2cled 
 +i2c=ooooooooiiiiiiii
 +steps=64
 +sleeptimer=5
 +pulse=5
 +pwmsize=0
 +options=0xC2 0x01 0x00 0x00
 +booster=0
 +board=1
 +display=3
 +railcom=0
 +id12=0
 +depart=0
 +stepper=0
 +canprot=0(0)
 +canio=0
 +canusb=0
 +trace=0
 +------------------------------
 +</code>
 +
 +
 +====User Configuration====
 +The [[https://gitlab.com/rocrail/wio/-/blob/master/USERCNF.h|USERCNF.h]] file can be used for initial, first boot, WiFi and Rocrail server values.\\
 +The values must be set before compile and upload.\\
 +Afterwards those values can be changed with monitor commands.\\
 +:!: The values in the USERCNF.h-file are only used, if there is no configuration yet (new device).\\
 +- If the values in the flash memory of an existing WIO-device should be replaced by those in the USERCNF.h, the option "Erase Flash" in the Arduino-IDE has to be set to "All Flash Contents".\\
 +- If just the firmware of an existing WIO-device should be updated, without changing the configuration (e.g. WLAN-settings), set the Arduino-IDE to "Erase flash -> only Sketch".
 +====Monitor commands====
 +The Arduino Serial Monitor can be use with 115200 bps to change WIO settings.\\
 +  - If RailCom has been activated the baudrate switches automatically to 250000 and the Serial Monitor is read only.
 +  - If ID12 has been activated the baudrate switches automatically to 9600 and the Serial Monitor is read only.
 +
 +Basic connection setup can also be done on the __**[[:arduino:wio-setup-en#maintenance|Maintenance Tab]]**__ of the WIO Setup Dialog.\\
 +
 +^ Command ^ Description ^ Default ^ Remark ^
 +| ?  | Shows the current settings and how to change them. |
 +| !  | Dumps the used EEPROM memory. |
 +| *sod | Force Start of Day |
 +| *scan | List all available WiFi APs |
 +| *ssid1=<value> | Set the WiFi access point SSID. | - | Primary SSID (max. 30 characters) |
 +| *pwd1=<value> | Set the WiFi password. A WiFi reconnect is triggered. | - | Primary WiFi password (max. 30 characters) |
 +| *ssid2=<value> | Set the WiFi access point SSID. | - | Alternative SSID (max. 30 characters) |
 +| *pwd2=<value> | Set the WiFi password. A WiFi reconnect is triggered. | - | Alternative WiFi password (max. 30 characters) |
 +| *server=<value> | Set the Rocrail Sever IP or Name. | - | May be a CSV of max 30 characters.(1.71+) \\ Example: "mba2019,win2019" \\ If set to auto it will have the same effect as the autoserver parameter. |
 +| *autoserver=<value> | Set the Rocrail Server auto search with R2RNet. | see USERCNF.h -> ENABLE_R2RNET | 0=off, 1=on |
 +| *name=<value> | Optional node name. | - |
 +| *id=<value> | Node number/throttle ID; Should be unique. | 33 |
 +| *io=<value> | WIO type.  | i2cled |
 +| *i2c=<value> | I2C port configuration.  | oooooooobbbbbbbboooooooobbbbbbbb |
 +| *steps=<value> | Number of rotary steps. | 127 |
 +| *pulse=<value> | Output pulse length in 100ms units. | 5 |
 +| *canprot=<value> | CAN protocol | MBUS | 0=MBUS, 1=RCAN |
 +| *dccslave=<value> | DCC role | Master | 0=Master, 1=Slave(Booster) |
 +| *trace=<value> | Trace level | 0 | 0=None, 2=Info, 4=Debug \\ Only for current session except for 2(Info). |
 +| *pwm=<value> | PWM size for mobile motor control | - | 600=10Hz |
 +| *display=<value> | Display type: 0=96x16, 1=128x32, 2=128x64, 3=SH1106 | - | 1 |
 +| *list | List all files |  |
 +| *dump=</filename> | Hex dump of file. |  | Prefix filename with a '/' |
 +| *dumpa=</filename> | ASCII dump of file. |  | Prefix filename with a '/' |
 +| *pwmslave=<value> | Provide sync on HALL pin. | master | 1=slave, 0=master |
 +| *pwm50=<value> | 50Hz software PWM freq. | 25Hz | 1=50Hz, 0=25Hz |
 +| *pwmhardware=<value> | 100Hz hardware PWM freq. | software PWM | 1=hardware, 0=software |
 +
 +**Note:**  Replace <value> to meet the local WiFi environment and setup.\\
 +**Note:**  A reset is necessary after changing the WIO Type.\\
 +
 +|< >|
 +^ Port type ^ Description ^
 +| i | Input |
 +| o | Output |
 +| b | Block: Input with a 2 second off delay. |
 +| p | Pulse: Output with auto off. |
 +
 +
 +
 +===IO Type Configuration===
 +^ IO Type ^ I2C 32I/O ^ FastLED ^ Servo ^ RFID ^ Display ^ DCC ^
 +| throttle |  -  |  -  |  -  |  -  |  -  |  -  |
 +| i2cled |  YES  |  YES  |  NO  |  NO  |  YES  |  NO  |
 +| i2cservo |  YES  |  NO  |  YES  |  NO  |  YES  |  NO  |
 +| i2crfid |  YES  |  NO  |  NO  |  YES  |  YES  |  NO  |
 +| i2cdcc |  YES  |  NO  |  NO  |  NO  |  YES  |  YES  |
 +
 + \\
 +
 +
 +
 +====OTA Updating====
 +|  //Must be activated by WIO Dialog.//  |
 +If it's not possible, or cumbersome, to update by USB, the WIO can also be updated "Over The Air" (OTA).\\
 +{{:arduino:wio-ota-en.png?400}}\\
 +Just select the desired WIO from the list instead of the USB port, and upload.\\
 +If asked for a **Password**, this is the same as for the [[#basic_setup_with_web_browser|Access Point]] (Default "12345678").\\
 +{{:arduino:wio-ota-display.png}}{{:arduino:ota-upload-en.png?600}}\\
 +
 +
 + \\
 +
 +====OTA Install from scratch====
 +  * __**[[arduino:wio-setup-en#ota_from_scratch|Install WIO by OTA from scratch]]**__
 +=====RIC - Throttle=====
 +| Note: RIC is no longer supported in the firmware, and is replaced by [[:arduino:wioctrl-en|WIO Control]]. |
 +**Note:** //RIC controls locos by address, not by ID. So the first one in the list will be used if multiple locos share the same address.//\\
 +The pocket throttle I/O mode needs a rotary switch, one LED and four buttons.\\
 +The LED can also be the build in one. (D4)\\
 +{{ :arduino:ric-prototype.jpg?200}}
 +====Proto Type 1====
 +^ Pin ^ Usage ^ Click ^ Long click ^
 +| D5/D6 | Rotary | - | - |
 +| D7 | Rotary switch | Change direction | Wait/Release loco |
 +| D4 | Onboard LED | - | - | 
 +| D1 | F1 | F1 | F5 |
 +| D2 | F2 | F2 | F6 | 
 +| D3 | F3 | F3 | F7 |
 +| D0 | F4 | F4 | F8 |
 +| A0 | Battery | - | - |
 +===Lights===
 +F0 is flipped if both F3 and F4 are pressed.\\ 
 +===Emergency Break===
 +An emergency break will send to the server if both F1 and F2 are pressed.\\ 
 +===Loco selection===
 +Loco 1 is selected by default.\\
 +Select loco 1 if both F1 and F4 are pressed.\\ 
 +Select loco 2 if both F2 and F3 are pressed.\\ 
 +
 +^ LED ^ Meaning ^
 +| On | No WiFi connection. |
 +| Very fast flashing 10Hz | No Rocrail server connection. |
 +| Off | Idle mode. |
 +| Fast flashing 5Hz | Waiting for a dispatch. |
 +| Slow flashing 1Hz | Operating mode. |
 +
 +===Boot===
 +At boot the LED will turn on until a WiFi connection is established.\\
 +
 +===Catch a Locomotive===
 +  - In case the LOLii did not catch a dispatched loco, and the rotary is pressed long, about 2 seconds, the LED will start flashing fast.
 +  - If the LOLii sees in this mode a loco dispatch, it will catch it and the LED will start flashing slow.
 +  - This loco catch will be saved in the flash memory and reused at reboot if it was not released.
 +===Speed Control===
 +  * Turn the rotary for speed changes.
 +  * A short rotary press will flip the loco direction.
 +===Function Control===
 +The four function buttons represents F1 to F4.\\
 +With a long click F5 to F8 can be accessed.\\
 +A function will be flipped after releasing the button to be able to process long clicks. (Same as with smartphones.)\\
 +===Release a Locomotive===
 +  - Press the rotary long, about 2 seconds,
 +  - A release message is send.
 +  - The LED will go off.
 +===Battery Control===
 +The analog input will check the battery voltage.\\
 +If the voltage is below a certain level, LOLii will send automatically a zero speed command to the locomotive and a release command.\\
 +The LED will start blinking very fast as long the battery is not drained completely.\\
 +===Server discovery===
 +If the Rocrail Server has R2RNet active on multicast address 224.0.1.20, the WIO can retrieve the server name/IP to connect it to the 8051 client port automatically.\\
 +
 + \\
 +=====WIO - I/O=====
 +  * Connects directly to the Rocrail Server Client port 8051.
 +  * WiFi and Server connection recovery.
 +  * 32 digital I/O, MCP23017, compatible with all GCA interfaces.
 +    * Input
 +    * Output
 +    * Block
 +    * Pulse
 +  * 100 LEDs compatible with WS2812 on D8. (Color type output in Rocrail.)
 +    * RGB color
 +    * Brightness
 +    * Dimming
 +    * Flashing
 +  * 4 Servos
 +    * Adjustable movement speed
 +    * Positions are saved in the plan.xml, Output/Switch, which makes swapping of hardware easier.
 +    * Reached end positions are saved in flash to provide a stable reboot.
 +  * DCC Command Station
 +  * Up to 255 units in the same WiFi network. (Depending on the IP configuration and availability.)
 +  * An alarm will be generated if 'a live' messages are no longer come in.
 +  * Output/Switch commands are acknowledged after they have been processed. (Blink outputs are not acknowledged.)
 +  * Input events must be acknowledged within 100ms. After this timeout a resend will occur. (Max. 5 retries.)
 +
 + 
 +====I/O Extender PCF8574P====
 +Up to 4 pieces of I/O extender type PCF8574 can be used as alternative to the 2 pieces of MCP23017.
 +  - 0x20 and 0x21 should not be available as I2C slave ID's. (No MCP23017's installed.)
 +  - The slave ID's of the PCF8574 must start with 0x22.
 +
 +**Note:** //Check for the correct type to match the 0x20 base address: PCF8574P or PCF857T. (The PCF8574A type starts with base address 0x38.)//\\
 +\\
 +====Addressing====
 +|< >|
 +^ Rocrail ^ WIO ^
 +| Interface ID | "WIO" |
 +| Node ID (Bus) | ID |
 +| Address | I2C Port |
 +| Address | LED Port |
 +| Address | Servo Port |
 +This addressing schema is used for:
 +  * Outputs
 +  * Switches
 +  * Signals
 +  * Sensors
 +
 +===Dual Coil Switches===
 +| //__Disable__ the 'Accessory' and 'Single gate' options, and __select__ output type.// |
 +The next address for none single gate switches is used for the turnout command.\\
 +So if on port 1 is a dual coil switch, port 2 should not be used, and the second switch goes on port 3.\\
 +Both I2C outputs are automatically used as type 'p' Pulse.\\
 +Possible hardware:
 +  * **[[:mgv76-en|GCA76]]**
 +  * [[:gca77-en|GCA77]]
 +  * [[:gca107-en|GCA107]]
 +
 +====Blink====
 +The output blink and delay options can be used to blink an I2C port.\\
 +If the delay is zero the default pulse length will be used.\\
 + \\
 +====LEDs====
 +//"NeoPixel"// \\
 +{{ :arduino:ws2812.jpg?200}}{{ :arduino:ws2811-chip.jpg?200}}
 +The addressing is the same as normal outputs.\\
 +
 +**Dimming information:**\\
 +//WIO version 875+//\\
 +The dimming frequentation depends of Controller Steps and Output/Signal delay.\\
 +The brightness is divided by the number of steps, and multiplied by the delay value which is subtracted/added every refresh cycle to the new brightness.\\
 +A low step and high delay value will cause fastest dimming.\\
 +
 +===Outputs===
 +  - WIO-ID: Bus
 +  - LED number: Address
 +  - LED range: ON parameter
 +  - The Interface -> Color option and type light must be set
 +  - Brightness is set by Interface -> Value
 +  - Dimming step is set by Interface -> Delay (0...15) (A value of zero deactivate dimming.)
 +  - The Interface -> Blink option may be used to flash the LED
 +  - The LED color is set by Color -> RGB
 +
 +===Signals===
 +  - WIO-ID: Bus
 +  - LED offset: Address
 +  - Port type: LED
 +  - Control type: Aspect number (Max. 6 sub LEDs -> 2 x WS2812)
 +  - Brightness
 +The aspect values are compatible with __**[[:rocnet:rocnetnode-led-en#signal_support|RocNetNode Pi08]]**__. (WIO version 0.81+)\\
 + \\
 +
 +====Signals====
 +  - WIO-ID: Bus
 +  - LED offset: Address
 +  - Port type: Output
 +  - Control type: Aspect number
 +The aspect values are compatible with __**[[:rocnet:rocnetnode-led-en#signal_support|RocNetNode Pi08]]**__. (WIO version 0.81+)\\
 + \\
 +====Charlieplexing Signal Support====
 +Only available on [[:wio:wio03-io16-de|WIOesp32 16 I/O]], [[:wio:wiopico-io16-en|WIOpico 16 I/O]], [[:wio:wiopico-en|SIOpico]]\\
 +A Rocrail signal with control aspects and port type multiplex, uses 4 pins starting with the port offset.\\
 +The refresh rate is about 250µs.\\
 +Aspect values are used from the details tab. 24bits are used, the upper 12bits are for blinking.\\
 +Example: LED 1 and 2 on and LED 2 blinking: 0x002003 -> Aspect value = 8195 \\
 +
 +A second signal on the mast can be defined in Rocrail with address + 100 to combine it with the main signal.\\
 +
 +Brightness sets brightness, only values ​​between 200-255 can be used. A value < 200 is set to 200.\\
 +Fading with dimming is not possible.\\
 +
 +^ LED Nummber for Viessmann Multiplex Signal^^^^^^^^^
 +|LED|Pin+|Pin-|1|2|3|4|Viessmann| |
 +|1|1|2|H|L| | |Vr_Ge_O|Distant signal yellow above|
 +|2|1|3|H| |L| |Hp_Rt_R|Main signal red  right|
 +|3|1|4|H| | |L|Hp_Rt_L|Main signal red  left|
 +|4|2|1|L|H| | |Vr_Gr_O|Distant signal green above|
 +|5|2|3| |H|L| |Vr_Gr_u|Distant signal green below|
 +|6|2|4| |H| |L| | |
 +|7|3|1|L| |H| |Hp_Ge|Main signal yellow|
 +|8|3|2| |L|H| |Vr_Ge_U|Distant signal yellow below|
 +|9|3|4| | |H|L| Hp_Ws_L|Main signal white left|
 +|10|4|1|L| | |H|Hp_Gr|Main signal green|
 +|11|4|2| |L| |H| | |
 +|12|4|3| | |L|H|Hp_Ws_R|Main signal white right|
 +
 +For a correct display of the main signal at red and shunting, the distant signal must be blanked. \\
 +The brightness value in the main and distant signal must be identical. \\
 +
 +Multiplex inputs from Vissmann, viewed from below on the connector. \\
 +{{:wio:viessmann-stecker.png?200|}}
 +\\
 +====Servos====
 +{{ :arduino:servo.jpg?200}}{{ :arduino:servo-pwm.png?200}} \\
 +The addressing is the same as normal outputs.\\
 +^ Control ^ Output ^ Switch ^ Signals ^ Segment Turntable ^ Range ^
 +| WIO | IID="WIO" | IID="WIO" | IID="WIO" | IID="WIO" | - |
 +| WIO ID | Node ID (Bus) | Node ID (Bus) | Node ID (Bus) | Node ID (Bus) | 1...255 |
 +| Servo port | Address | Address | Address | Address | 1...4 |
 +| Extra options | - | Single gate ON | - | - | - |
 +| Accessory | - | - | Details | - |
 +| Position 1 | Parameter ON | Parameter | RED Value 0 * | - | 0...180° |
 +| Position 2 | Parameter OFF | Value | GREEN Value 1 * | - | 0...180° |
 +| Position | - | - | - | Decoder Trak number | PWM 500...2500 ²|
 +| Moving speed | Delay | Switch time | Dim | Step delay| 1...10 |
 +| Target | Port type "Servo" | Port type "Servo" | Port type "Servo" | Type wioservo | - |
 +*  Details tab, enter using the field with decimals in the Value button \\
 +²  Attention, too high or too low values ​​can damage the servo start with PWM 1500 = 0°. \\
 +The value of the servo angle must be confirmed with enter in the decimal field.
 +
 + \\
 +====RFID====
 +|  //Make sure that there are no servos and LEDs connected when switching to RFID.//  |
 +
 +Not possible with WIO Type I/O16, please use ID-12LA here.
 +
 +{{ :arduino:wio-spi-rfid.jpg?240}}
 +  - Two RFID RC522 readers are supported.
 +  - It needs 5 extra ports; Parallel Servos are not possible.
 +  - Reporting addresses are 100 and 101. (In Rocrail 101 and 102.)
 +  - Automatic sensor off event after 1500ms. (Before it must be acknowledged by the server.)
 +  - Four times retry until acknowledge, then give up.
 +
 + \\
 +
 +^ Signal ^ D1 Mini ESP8266 ^ Pico port ^ RFID RC522 ^
 +| Slave Select 1 | D3 | GP17 | 1 (SDA) reader 1 |
 +| Slave Select 2 | D0 | GP15 | 1 (SDA) reader 2 |
 +| SCK | D5 | GP18 | 2 (SCK) |
 +| MOSI | D7 | GP19 | 3 (MOSI) |
 +| MISO | D6 | GP16 | 4 (MISO) |
 +
 + \\
 +====ID-12LA====
 +{{ :arduino:rfid-card-antenna.jpg?200}} {{ :arduino:id12la-pin6-led-taginrange.jpg?200}} \\
 +Optional a RFID reader from type [[http://id-innovations.com|ID-12LA]] can be connected to the RX pin for detecting tags which will be reported to Rocrail.\\
 +The tag is used as **[[:sensor-gen-en#id|Sensor ID]]** or **[[:sensor-int-en#uid-name|UID-Name]]**, **[[:can-gc4-en#rfid_notation|decimal dot formatted]]**.\\
 +The **[[:gca_rfid-en|GCA RFID]]** board can be used to mount and connect the ID-12LA.\\
 +__The serial monitor will be set to 9600bps.__\\
 +**Note 1:** This is to scan tags between the rails to let Rocrail know where the running vehicle is.\\ 
 +**Note 2:** Use selected Tags which respond rapidly.\\ \\
 +
 +
 + \\
 +
 +
 +====Pins I2C====
 +^ Pin ^ Usage ^
 +| A0 | Power monitoring |
 +| D1 | I2C SCL |
 +| D2 | I2C SDA |
 +| D4 | Build in LED |
 +| D8 | LEDs (FastLED) |
 +
 +<html><!--
 +====Pins Native====
 +^ Pin ^ Usage ^
 +| A0 | Power monitoring |
 +| D0...D7 | I/O Ports on J1 |
 +| D8 | LEDs (FastLED) |
 +--></html>
 +
 + \\
 +====Pins S88====
 +|< >|
 +^ ESP8266 ^ ESP32 ^ PicoW ^ Usage ^
 +| D0 | 12 | 10 | PS |
 +| D5 | 17 | 11 | Reset |
 +| D6 | 26 | 12 | Clock |
 +| D7 | 27 | 13 | Data |
 +
 + \\
 +
 +
 +====Display SSD1306/SH1106====
 +|{{:arduino:wio-oled-128x32.jpg?0x160}}|{{:arduino:f8.jpg?0x160}}|
 +|  Example.  |  {f8} on a SH1106 display.  |
 +
 +Two displays can be connected to the I2C of Type SSD1306 with the I2C addresses 0x3C and 0x3D.\\
 +Formatted text is compatible with [[:rocnet:rocdisplay-en#text_format|RocDisplay]].\\
 +WIO supports only a subset, and some new lower case commands are introduced.\\
 +Code page is ISO 8859 Latin for font {F0}; {F1} is 7 bit ASCII only.\\
 +===Addressing===
 +The Bus is used for the WIO ID, and the Display number for selecting between 1 and 2. (0x3C or 0x3D)\\
 +The Address value is not used.\\
 +===Multiplexing===
 +Up to 16 display can be used with **[[:wio:wio-displaymultiplex-en|Display multiplexing]]**.\\
 +===Supported Formatting===
 +Formatting commands are enclose in curly brackets.
 +Example:
 +<code>
 +{g1}{E}{L0}{X0}Hello World!{P}
 +</code>
 +^ Command ^ Parameter ^ Description ^ Remark ^
 +| {A...} | 0...9 & : | Enlarged numbers. | Example: {A%hour%:%min%} |
 +| {B#} | #=0-99999999 | Read an AMP file, "#.amp", from SPIFFS, and draw the bitmap on the current position. |
 +| {B'//name//'} or {B[name]} | AMP file //name// | Read an AMP file, "//name//.amp", from SPIFFS, and draw the bitmap on the current position. | The name must be between square brackets((Preferred for Rocview.)) or single quotes. |
 +| {E} | - | Erase display buffer. An extra {P} is needed to erase the display. |
 +| {F#} | #=0-2 | Select font. 0=7x5 1=6x5w 2=6x5n | Font 5x5 is not supported because its unreadable. |
 +| {H#} | #=0-255 | Set the display contrast. |
 +| {I#} | #=0-1 | Invert the display. 0=normal 1=inverted |
 +| {L#} | #=0-3 | Goto line. The range depends on the display size. (Y = L * 8) |
 +| {P} | - | Copy buffer to the display. |
 +| {R#} | #=0,2 | Set display mapping rotation. 0=0° 2=180° | See also **[[:arduino:wio-setup-en#display|Setup Display]]** |
 +| {?V} | - | Show firmware version. |
 +| {X#} | #=0-127 | Goto column. The range depends on the display size. |
 +| {Y#} | #=0-32 | Goto row. The range depends on the display size. |
 +| {c#} | #=1-16 | Draw an analog clock with the given radius on the current position. | Only one (fast) clock per display will be updated. |
 +| {g#} | #=0,**1**,2,3 | Set display geometry. 0=96x16, 1=128x32, 2=128x64, 3=SH1106 (1 is default)| This is for testing only. To save CPU load set the [[#monitor_commands|display]] option. \\ See also **[[:arduino:wio-setup-en#display|Setup Display]]** |
 +| {i} | - | Toggle inverted text. |
 +| {s#} | #=1-x | Draw scrolling text on the current position, with a view width of n characters. | Example: {s12}Scrolling text to show...{s} |
 +| {d} | - | Scroll one text line down. |
 +| {f#} | #=1-2 | 7-Segment fast clock. | Only one (fast) clock per display will be updated. |
 +| {f7} | - | User defined fast clock. \\ __Needed files:__ 0.amp...9.amp and colon.amp | Example data: {{:arduino:f7.zip}} \\ Max. file size is 1024 bytes per amp. \\ {X#} and {L#} are used for position. \\ The DISPLAY_FASTCLOCK must be set to true in the USERCNF.h |
 +| {f8} | - | Same as {f7} but with leading hour zero if needed. | Example: 08:22 instead of 8:22|
 +| {p} | - | Swap displays. |
 +| {l#,#} | - | Draw a line from X,Y to #,# |
 +| {r#,#} | - | Draw a rectangle left upper X,Y to right under #,# |
 +| {z#} | - | Draw a circle with center and radius # |
 +| {x#,#} | - | Draw a pixel at #,# |
 +| {+} | - | [[:arduino:wio-ampchar-en|Use large characters from file system.]] | The characters are on the file system in the amp format. Example: ''3.amp'' |
 +| {-} | - | Stop using large characters. |
 +
 +**Note:** //If the geometry is not default, 128x32, the text MUST start with a {gn} command for selecting the right geometry.//\\
 +
 + \\
 +====7-Segment Display HT16K33 ====
 +{{ :arduino:adafruit-ht16k33.jpg?200}}
 +//Fast Clock//\\
 +The Adafruit breakout board HT16K33 is supported on I2C address 0x70.\\
 +It displays alternate time, date and temperature.\\
 +With the ''NTP_CLOCK'' USERCNF.h setting the "pool.ntp.org" service will be used to get the time of day instead from the Rocrail server. It will not alternate between date and temperature.\\
 + \\
 +
 +====DCC Generator====
 +{{ :arduino:pulseview-wio-dcc.jpg?400}}
 +=== WIO supports following DCC packets ===
 +  * Loco speed and direction. (No support for 14 speed steps.)
 +  * Loco functions 0-32.
 +  * PoM set/get. (A RailCom detector, GCA214, is needed for PoM get.)
 +  * Accessories.
 +  * BinState
 +  * Programming Track; Service mode. (A second H-Bridge is required: __**[[:gca:wioprog2-en|WIO-Prog2]]**__)
 +    - Global power must be ON
 +    - PT must be set to ON
 +    - Read/Write CV
 +  * Loco addresses >= 100 are regarded as long address.
 +  * Short address 111 is used as dummy to trigger other decoders to broadcast there address.
 +===Features===
 +  * 100% NMRA timing conform.
 +  * Automatically Power OFF after a Rocrail Server connection loss.
 +  * Shows activity on a display if one connected.
 +  * 48 slot refresh stack with auto purging.
 +  * 12 accessory command queue.
 +
 +===Loco addressing===
 +^ Field ^ Value ^ Range ^ Remark ^
 +| IID | WIO |
 +| Node-ID | The WIO number | 1...255 | The node on which the DCC generator is active. |
 +^ Address | DCC decoder address. | 1...n | Addresses > 99 are regarded as long DCC address. \\ 111 is reserved for RailCom wakeup. |
 +| Decoder steps | Running notches | 28, 128| 14 is not supported |
 +
 +
 +===Accessory addressing===
 +^ Field ^ Value ^ Range ^ Remark ^
 +| IID | WIO |
 +| Node-ID | The WIO number | 1...255 | The node on which the DCC generator is active. |
 +| Address | Module number | 1...1024 | See __**[[:addressing-en#module_accessory_decoder_address_mada|MADA]]**__ |
 +| Port | Module output pair | 1...4 |
 +| Gate | Pair command | 0...1 | Switch objects will set the gate accordantly to the wanted position. |
 +| Type | Accessory |
 +
 +
 +
 +===Pins DCC ESP8266===
 +^ Pin ^ Usage ^ Remark ^
 +| D6 & D7 | DCC symmetric signal. | |
 +| D5 | Enable H-Bridge 1 | Operation |
 +| D8 | Enable H-Bridge 2 | Service |
 +
 +===ORD3===
 +To use the 3.3V level a 470 Ohm resistor must be added parallel to R1.\\
 +
 +
 + \\
 +====Mobile====
 +Use the WIO as mobile decoder.\\
 +The locomotive __**[[:loc-int-en#bus|Bus]]**__ value must be set to the WIO ID.\\
 +The number of __**[[:loc-int-en#decoder_steps|Decoder Steps]]**__ must be set in the range 50 to 100.\\
 +===Pins LOLIN D1===
 +{{  arduino:lipo3s-measure-.png?240}}
 +^ Pin ^ Usage ^ H-Bridge ^ Remark ^
 +| D0 | Lights front | | Cab1 |
 +| D3 | Lights rear | | Cab2 |
 +| D5 | Motor Enable | ENA | RC ESC servo PWM |
 +| D6 | PWM forwards direction | IN1 | |
 +| D7 | PWM reverse direction | IN2 | |
 +| D8 | Servo PWM for coupler | | F1 |
 +| I2C 1-32 | Functions 1 to 32 | | The [[:loc-fun-en#address_fx|Function address]] must be set > 0. |
 +| A0 | Battery monitor LiPo 3S | | + 100kΩ A0 32kΩ - |
 +Acceleration/deceleration can be simulated with the locomotive interface parameter __**[[:loc-int-en#mass|Mass]]**__. (10ms resolution.)\\
 +A mass value of 5 will increase/decrease the PWM 1 step at every 5*10ms.\\
 +Vstart and Vhigh, CV2/CV5, can be simulated with the __**[[:loc-int-en#step_range|Step range]]**__\\
 +===Electronic Speed Controller===
 +An **E**lectronic **S**peed **C**ontroller, ESC, on pin D5 can also be used for motor control if this option is set.\\ 
 +Note: __**Only connect ground and PWM in case the ESC supports BEC.**__\\
 + \\
 +
 +====RailCom====
 +{{ :arduino:railcom_cutout.jpg?400}}
 +The serial connector on the WIO PCB can be used to connect it to an amplifier for reading RailCom data.\\
 +The GCA214 can be used as amplifier.\\
 +The following RailCom IDs are supported:
 +^ ID ^ Channel ^ Description ^
 +|  0  |  2  | POM read |
 +|  1  |  1  | Low decoder address |
 +|  2  |  1  | High decoder address |
 +The only way to activate RailCom reading in WIO is to set this option in the WIO Dialog. (WIO 0.105, Rocrail 2.1.212)\\ 
 +The serial bps will switch to 250000, and the monitor will be read only. __So with this option active its not possible to setup the WIO by monitor commands.__\\
 + \\
 +
 +====Sensors====
 +{{ :arduino:bmp280.jpg?140}}{{ :arduino:tsl2591.jpg?140}}
 +One BME280/BMP280 sensor, connected to I2C, is supported for temperature, pressure and humidity.\\
 +The USER_ALTITUDE in the USERCNF.h must be adjusted to meet the local altitude for correct pressure values.\\
 +One TSL2591 'Light-to-Digital Converter' sensor, connected to I2C, is supported for calculating brightness.\\
 +===Dynamic Text===
 +Temperature, pressure and humidity can be used as text and XMLScript variables.\\
 +See: __**[[:text-gen-en#dynamic_text|Dynamic Text]]**__ \\
 + \\
 +
 +
 +====Sound====
 +Sound can be played on ESP32 boards using one of the DAC pins. (GPIO25 or GPIO26)\\
 +The USER_SOUND in the USERCNF.h must be set to true:
 +<code>
 +// Sound
 +#define USER_SOUND          true
 +</code>
 +Supported [[ https://de.wikipedia.org/wiki/RIFF_WAVE|RIFF Wave]] format:
 +  * PCM type
 +  * Sample rate 11.025 Hz
 +  * 16 sample bits
 +  * One channel (Mono)
 +===Action===
 +  * Type: Sound
 +  * Command: Play
 +  * Parameter: Sound file incl. path like: "/F9.wav"
 +  * Interface Bus: WIO ID
 +Example:
 +<code xml>
 +<ac id="F9" cmd="play" param="/F9.wav" type="sound" iid="WIO" bus="38" addr="0" port="0"/>
 +</code>
 +===Recommendations===
 +The DAC is only capable to use 8 bits. The 16 bit data must be interpreted, which is not possible without data loss.\\
 +To get the best result:
 +  * Normalise the sounds files so the data uses the full 16 bit.
 +
 +
 + \\
 +====StepMotor====
 +The WIO-02 supports two types of step motors: 4-wire and 3-wire step driver.\\
 +{{ :arduino:stepmotor-4wire.jpg?0x200}}{{ :arduino:stepmotor-3wire.jpg?0x200}}
 +^ WIO-02 ^ 4-wire ^ 3-wire ^ Remark ^
 +| 32 | IN1 | CLK+ |
 +| 13 | IN2 | DIR+ |
 +| 2 | IN3 | ENABLE+ |
 +| 15 | IN4 | - |
 +| 25 | -   | | Hall/Reed calibrate sensor *| 
 +| EP1-1   | GND | CLK-,DIR-,ENABLE- |
 +| -       | VCC | 12V-45V DC | External power supply |
 +
 +
 +* The calibration sensor should be installed as close as possible to track 0
 +
 +===Turntable Setup===
 +|  Turntable Interface  ||
 +^ Field ^ Value ^ Remark ^
 +| Node ID | WIO-02 ID | |
 +| Address | 1 | Fixed |
 +| Lights  | 1...32 | Optional bridge cabin lights. \\ Digital output port on the same WIO-02. |
 +| Decoder steps | 0-16777215 | Nr of steps for one 360° rotation. \\ In case of a 28BYJ-48: 4096 steps. |
 +| Correction | 0-255 | To compensate for the gear backlash. |
 +| Step delay | 0-255 | The delay between the motor step. Higher values will slow down the rotation speed. |
 +| Offset | -32767...+32767 | Calibration correction point in steps. |
 +| Type | wio |
 +| Delay | 1-10 | Size of the start and deceleration ramp |
 +//The number of decoder steps for one turntable rotation is needed to calculate the shortest way.//\\
 + \\
 +|  Turntable Tracks (Example 4096 steps)  ||
 +^ Track ^ Decoder track ^
 +|  0  |  0  |
 +|  12  |  1024  |
 +|  24  |  2048  |
 +|  36  |  3072  |
 +
 +XML example: (Only mandatory attributes are listed.)
 +<code xml>
 +  <tt ori="west" id="tt1" x="11" y="4" z="0" pos="0" iid="RCAN-1" bus="102" addr="1" type="wio" decsteps="4096">
 +    <track nr="0" decnr="0"/>
 +    <track nr="12" decnr="1024"/>
 +    <track nr="24" decnr="2048"/>
 +    <track nr="36" decnr="3072"/>
 +  </tt>
 +</code>
 +
 +=== Output-Setup ===
 +
 +|< >|
 +|  Interface |
 +^ Field ^ Value ^ Remark ^
 +| Node ID | WIO ID | |
 +| Adress | 1 | //fix// |
 +| Parameter on | 0-16777215 | Number of steps counterclockwise |
 +| Parameter off | 0-16777215 | Number of steps clockwise |
 +| Delay | 0-255 | rotation speed \\ If the value is >0, an acceleration and braking ramp is generated. |
 +| Type | Motor |
 +
 +Calibration is not possible!
 +
 +
 +====CAN====
 +{{ :arduino:gc2a-wio-can.jpg?400}}
 +The WIO CAN type can be used as CAN-WiFi bridge for 
 +  * [[:mbus:cs3-en#communication_type|MBUS, type TCP on port 5550]]
 +  * RCAN, type TCP+binary on port 5550
 +====MCP2515====
 +Pin mapping for using the SPI MCP2515(16MHz) on the __**[[:can-gca2a-en|GC2a]]**__:
 +
 +^ Name ^ Nano ^ Lolin D1 Mini ^ Lolin D32 ^ Remark ^
 +| GND | GND | GND | GND | Ground |
 +| 5V | 5V | 5V | 5V(USB) | |
 +| CS | D10 | D3 | GPIO14 | Chip Select |
 +| MOSI | D11 | D7 | GPIO23(MOSI) | Master Output, Slave Input |
 +| MISO | D12 | D6 | GPIO19(MISO) | Master Input, Slave Output |
 +| SCK | D13 | D5 | GPIO18(SCK) | Serial Clock |
 +
 +The Lolin D1 must be connected to 5V USB without power supply from the CAN bus.\\
 +A WIO-CAN kit will become available.\\
 +
 + \\
 +====ESP32====
 +The current WIO firmware, 1.94, does use the internal CAN controller, and uses therefor only the MCP2551/2561. (SPI CAN is no longer supported for the MCP2515)\\
 +In case of ESP32 the CAN communication is always activated, independent of wich WIO type is selected.\\
 +|< >|< >|< >|
 +^ Connection ^ ESP32 Pin ^ MCP2561 ^
 +| TXCAN  |  16 |  1 |
 +| RXCAN  |   4 |  4 |
 +
 + \\
 +=====Mobile RFID reader=====
 +The WIO can also be used as mobile RFID reader and I/O.\\
 +The WIO ID must be set in the loco **[[:loc-int-en#secondary_address|Secondary Address]]** field.\\
 +
 +====Sensor setup====
 +<code>Loco [ICE] reports RFID event 56:101 [4.102.181.114.9.64.128] ON</code>
 +The reported RFID must mach with a __**[[:sensor-gen-en#id|Sensor-ID]]**__ in Rocrail.\\
 +The sensor in Rocrail should have an address unique other than zero.\\
 +The ID must be set in this notation: __**[[:can-gc4-en#rfid_notation|RFID Notation]]**__\\
 +The Rocrail traces can be used to copy this ID or the __**[[:sensormon-en|Sensor Monitor]]**__.\\
 +
 +
 +====Function setup====
 +To dispatch functions to a WIO the function must be setup with **[[:loc-fun-en#address_fx|Function address and FX]]**.\\
 +
 +
 +
 +
 + \\
 +
 +=====KeyPad=====
 +{{ :wio:wio-keypad.jpg?240}}
 +A KeyPad is supported on WIO Type IO16 on I/O connector 1.
 +The # key will send the input to Rocrail es Text event. Rocrail will look up a Text object with this NodeID set on the interface tab.\\
 +With the * key the input can be corrected.\\
 +If a display is connected the input will be shown on line 3, but can be changed in the USERCNF.h. (Zero based line offset.)\\
 +Supportes KeyPads: 3x4 and 4x4. The 4x4 has "ABCD" on the extra key column.\\
 +It is recommended to set the ports 1...8 on the setup tab as follows:\\
 +{{:arduino:keypad-port-setup.jpg?240}}\\
 +
 +
 + \\
 +
 +=====Hardware=====
 +The firmware for IO-Type RIC does not function without pull-up resistors on the button inputs, including the rotary switch.
 +
 +====Schedules & PCBs====
 +  * https://gitlab.com/rocrail/Arduino/tree/master/WIO/hardware
 +
 +//The published hardware are prototypes, are incomplete and not ready for release.\\
 +Only original GCA Kits are supported.//
 +
 +  * https://wiki.rocrail.net/doku.php?id=gca:gca-index-en
 +
 +
 + \\
 +=====Trouble Shooting=====
 +====LOLIN vs Wemos====
 +|< >|
 +|  Top  ||  Bottom  ||
 +|  LOLIN D1 mini  |  Wemos mini  |  LOLIN D1 mini  |  Wemos mini  |
 +| {{:arduino:d1-top.jpg?0x300}} || {{:arduino:d1-bottom.jpg?0x300}} ||
 +
 +|< >|
 +^ Pin ^ Lolin ^ Wemos ^
 +|  D3  |  -  | Won't boot in case low. |
 +
 +
 + \\
 +====Very slow====
 +If an I2C module, like the Pi02 or Pi03, is connected to the I2C bus of the WIO, and has no power, it will slowdown the processing and no other I2C devices are detected. (Multiple seconds between the loop calls.)\\
 +The P82B715 I2C-bus extender seems to drain the I2C clock and data lines, which will confuse the ISR in the Wire library.\\
 +The Pi08, with the PCA9622 chip, does not suffer this problem with its internal I2C-bus extender.\\
 +===Solution===
 +Make sure all conneted I2C modules are powered up at the same time as the WIO.\\
 +
 + \\
 +====macOS "Big Sur"====
 +===Upload tool ESP8266===
 +  * https://forum.arduino.cc/index.php?topic=702144.0
 +
 +===Upload tool ESP32===
 +  * https://github.com/espressif/esptool/issues/540
 +
 +
 +
 +
 + \\
 +=====Programming WIO Binary with Arduino IDE Tools=====
 +
 +|  Arduino IDE 1.8.16  |
 +
 +====macOS "Big Sur"====
 +===ESP8266===
 +<code>
 +export WIOBIN=~/Downloads/WIO.ino.d1_mini.bin
 +
 +/Users/$USER/Library/Arduino15/packages/esp8266/tools/python3/3.7.2-post1/python3 \
 +/Users/$USER/Library/Arduino15/packages/esp8266/hardware/esp8266/3.0.1/tools/upload.py \
 +--chip esp8266 --port /dev/cu.usbserial-110 --baud 921600 --before default_reset --after hard_reset write_flash 0x0 $WIOBIN
 +</code>
 +===ESP32===
 +<code>
 +~/Library/Arduino15/packages/esp32/tools/esptool_py/3.1.0/esptool \
 +--chip esp32 \
 +--port /dev/cu.usbserial-01B9FA0C \
 +--baud 921600 \
 +--before default_reset \
 +--after hard_reset write_flash \
 +-z \
 +--flash_mode dio \
 +--flash_freq 80m \
 +--flash_size 4MB \
 +0x10000 WIO.ino.d1_mini32.bin
 +</code>
 +
 +
 +====Windows 10====
 +<code>
 +set WIOBIN=\Users\%USERNAME%\Downloads\WIO.ino.d1_mini.bin
 +
 +C:\Users\%USERNAME%\AppData\Local\Arduino15\packages\esp8266\tools\python3\3.7.2-post1/python3 -I C:\Users\%USERNAME%\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2/tools/upload.py --chip esp8266 --port COM3 --baud 921600 --before default_reset --after hard_reset write_flash 0x0 %WIOBIN%
 +</code>
 +
 +====PiOS-64 "Buster"====
 +<code>
 +export WIOBIN=/home/$USER/Downloads/WIO.ino.d1_mini.bin
 +
 +/home/$USER/.arduino15/packages/esp8266/tools/python3/3.7.2-post1/python3 -I /home/$USER/.arduino15/packages/esp8266/hardware/esp8266/3.0.2/tools/upload.py --chip esp8266 --port /dev/ttyUSB0 --baud 921600 --before default_reset --after hard_reset write_flash 0x0 $WIOBIN 
 +</code>
 +
 +
 +