Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ jobs:
arduino-cli lib install WiFiNINA
arduino-cli lib install "STM32duino X-NUCLEO-IKS01A3"
arduino-cli lib install "Seeed Arduino rpcWiFi" # Dependent libraries(e.g. "Seeed Arduino rpcUnified") will be installed together. See https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/#needed-libraries-for-wi-fi for more details.
arduino-cli lib install WiFiEspAT
# Build all demos
arduino-cli compile --fqbn OpenCR:OpenCR:OpenCR /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher -v
arduino-cli compile --fqbn OpenCR:OpenCR:OpenCR /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_addtwoints_service -v
Expand Down Expand Up @@ -81,3 +82,21 @@ jobs:
arduino-cli compile --fqbn esp32:esp32:esp32 /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher -v
arduino-cli compile --fqbn esp32:esp32:esp32 /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher_wifi -v
arduino-cli compile --fqbn Seeeduino:samd:seeed_wio_terminal /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher_wifi -v
# BUILDING micro-ros_publisher-wifi for WiFi non-native board with ESP-AT(expected to succeed)
arduino-cli compile --build-property "build.extra_flags=-DUSE_WIFI_ESP_AT -DESP_AT_SERIAL_PORT=Serial1 -DESP_AT_BAUDRATE=115200 -DESP_AT_RESET_PIN=-1" --fqbn arduino:mbed:pico /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher_wifi -v
# BUILDING micro-ros_publisher-wifi for WiFi native board with ESP-AT(expected to fail)
return_code=0
arduino-cli compile --build-property "build.extra_flags=-DUSE_WIFI_ESP_AT -DESP_AT_SERIAL_PORT=Serial1 -DESP_AT_BAUDRATE=115200 -DESP_AT_RESET_PIN=-1" --fqbn arduino:mbed:nanorp2040connect /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher_wifi -v || return_code=$?
if [ $return_code -eq 0 ]
then
echo Build succeeded as not expected!
exit 1
fi
# BUILDING micro-ros_publisher-wifi for WiFi non-native board without definition "USE_WIFI_ESP_AT'"(expected to fail)
return_code=0
arduino-cli compile --fqbn arduino:mbed:pico /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher_wifi -v || return_code=$?
if [ $return_code -eq 0 ]
then
echo Build succeeded as not expected!
exit 1
fi
53 changes: 35 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,30 +24,47 @@ As the build process for ROS 2 and micro-ROS is based on custom meta-build syste

Supported boards are:

| Board | Min version | State | Details | .meta file |
| ----------------------------------------------------------------------------------- | ----------- | ---------- | --------------------------------------------------------------------------------------------------- | ------------------------ |
| [Arduino Portenta H7 M7 Core](https://store.arduino.cc/portenta-h7) | v1.8.5 | Supported | Official Arduino support | `colcon.meta` |
| [Arduino Nano RP2040 Connect](https://docs.arduino.cc/hardware/nano-rp2040-connect) | v1.8.5 | Supported | Official Arduino support | `colcon_verylowmem.meta` |
| [OpenCR](https://emanual.robotis.com/docs/en/parts/controller/opencr10/) | v1.4.16 | Supported | [Based on custom board](https://emanual.robotis.com/docs/en/parts/controller/opencr10/#arduino-ide) | `colcon.meta` |
| [Teensy 4.0](https://www.pjrc.com/store/teensy40.html) | v1.8.5 | Not tested | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon.meta` |
| [Teensy 4.1](https://www.pjrc.com/store/teensy41.html) | v1.8.5 | Supported | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon.meta` |
| [Teensy 3.2/3.1](https://www.pjrc.com/store/teensy32.html) | v1.8.5 | Supported | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon_lowmem.meta` |
| [Teensy 3.5](https://www.pjrc.com/store/teensy35.html) | v1.8.5 | Not tested | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon_lowmem.meta` |
| [Teensy 3.6](https://www.pjrc.com/store/teensy36.html) | v1.8.5 | Supported | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon_lowmem.meta` |
| [ESP32 Dev Module](https://docs.espressif.com/projects/arduino-esp32/en/latest/boards/ESP32-DevKitC-1.html) | v1.8.5 | Supported | [Arduino core for the ESP32 (v2.0.2)](https://github.com/espressif/arduino-esp32/releases/tag/2.0.2) | `colcon.meta` |
| Board | Min version | State | Details | .meta file |
| ----------------------------------------------------------------------------------------------------------- | ----------- | ---------- | ---------------------------------------------------------------------------------------------------- | ------------------------ |
| [Arduino Portenta H7 M7 Core](https://store.arduino.cc/portenta-h7) | v1.8.5 | Supported | Official Arduino support | `colcon.meta` |
| [Arduino Nano RP2040 Connect](https://docs.arduino.cc/hardware/nano-rp2040-connect) | v1.8.5 | Supported | Official Arduino support | `colcon_verylowmem.meta` |
| [OpenCR](https://emanual.robotis.com/docs/en/parts/controller/opencr10/) | v1.4.16 | Supported | [Based on custom board](https://emanual.robotis.com/docs/en/parts/controller/opencr10/#arduino-ide) | `colcon.meta` |
| [Teensy 4.0](https://www.pjrc.com/store/teensy40.html) | v1.8.5 | Not tested | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon.meta` |
| [Teensy 4.1](https://www.pjrc.com/store/teensy41.html) | v1.8.5 | Supported | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon.meta` |
| [Teensy 3.2/3.1](https://www.pjrc.com/store/teensy32.html) | v1.8.5 | Supported | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon_lowmem.meta` |
| [Teensy 3.5](https://www.pjrc.com/store/teensy35.html) | v1.8.5 | Not tested | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon_lowmem.meta` |
| [Teensy 3.6](https://www.pjrc.com/store/teensy36.html) | v1.8.5 | Supported | [Based on Teensyduino](https://www.pjrc.com/arduino-ide-2-0-0-teensy-support/) | `colcon_lowmem.meta` |
| [ESP32 Dev Module](https://docs.espressif.com/projects/arduino-esp32/en/latest/boards/ESP32-DevKitC-1.html) | v1.8.5 | Supported | [Arduino core for the ESP32 (v2.0.2)](https://github.com/espressif/arduino-esp32/releases/tag/2.0.2) | `colcon.meta` |

Community contributed boards are:

| Board | Min version | Contributor | Details | .meta file |
| ---------------------------------------------------------------------------------------- | ----------- | ---------------------------------------------- | ------- | ------------------------ |
| [Arduino Due](https://store.arduino.cc/arduino-due) | - | [@lukicdarkoo](https://github.com/lukicdarkoo) | | `colcon_verylowmem.meta` |
| [Arduino Zero](https://store.arduino.cc/arduino-zero) | - | [@lukicdarkoo](https://github.com/lukicdarkoo) | | `colcon_verylowmem.meta` |
| [Kakute F7](http://www.holybro.com/product/kakute-f7-aio-v1-5/) | - | [@amfern](https://github.com/amfern) | | `colcon.meta` |
| [STM32-E407](https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407.pdf) | - | [@dominikn](https://github.com/dominikn) | | `colcon.meta` |
| [Wio Terminal](https://wiki.seeedstudio.com/Wio-Terminal-Getting-Started/) | - | [@maehara-keisuke](https://github.com/maehara-keisuke) | | `colcon.meta` |
| Board | Min version | Contributor | Details | .meta file |
| ---------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------ | ------- | ------------------------ |
| [Arduino Due](https://store.arduino.cc/arduino-due) | - | [@lukicdarkoo](https://github.com/lukicdarkoo) | | `colcon_verylowmem.meta` |
| [Arduino Zero](https://store.arduino.cc/arduino-zero) | - | [@lukicdarkoo](https://github.com/lukicdarkoo) | | `colcon_verylowmem.meta` |
| [Kakute F7](http://www.holybro.com/product/kakute-f7-aio-v1-5/) | - | [@amfern](https://github.com/amfern) | | `colcon.meta` |
| [STM32-E407](https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407.pdf) | - | [@dominikn](https://github.com/dominikn) | | `colcon.meta` |
| [Wio Terminal](https://wiki.seeedstudio.com/Wio-Terminal-Getting-Started/) | - | [@maehara-keisuke](https://github.com/maehara-keisuke) | | `colcon.meta` |

You can find the available precompiled ROS 2 types for messages and services in [available_ros2_types](available_ros2_types).

### Community confirmed External WiFi module

At present, few boards have native WiFi interface and can use WiFi UDP Transport.

Meanwhile, many WiFi non-native boards have secondary UART channel(in most cases, assigned as `Serial1`).
And we may use WiFi UDP Transport by connecting ESP-AT External WiFi module to this channel.

See [ESP-AT Resources](https://www.espressif.com/en/products/sdks/esp-at/overview) for more details about ESP-AT External WiFi module. And try `examples/micro-ros_publisher_wifi`

Community confirmed combinations of board and ESP-AT module are:

| Board | Board Definition | ESP-AT Module | ESP-AT Firmware version | Note | Confirmed By |
| -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| [Raspberry Pi Pico](https://www.raspberrypi.com/documentation/microcontrollers/) | [Arduino Mbed OS RP2040 Boards](https://github.com/arduino/ArduinoCore-mbed) | [ESP32C3-WROOM-02](https://www.espressif.com/sites/default/files/documentation/esp32-c3-wroom-02_datasheet_en.pdf) | [v2.4.2.0](https://dl.espressif.com/esp-at/firmwares/esp32c3/ESP32-C3-MINI-1-AT-V2.4.2.0.zip) | | [@maehara-keisuke](https://github.com/maehara-keisuke) |
| [Seeed Studio XIAO SAMD21](https://wiki.seeedstudio.com/Seeeduino-XIAO/) | [Seeed SAMD Boards](https://github.com/Seeed-Studio/ArduinoCore-samd) | [ESP32C3-WROOM-02](https://www.espressif.com/sites/default/files/documentation/esp32-c3-wroom-02_datasheet_en.pdf) | [v2.4.2.0](https://dl.espressif.com/esp-at/firmwares/esp32c3/ESP32-C3-MINI-1-AT-V2.4.2.0.zip) | | [@maehara-keisuke](https://github.com/maehara-keisuke) |
| [Seeed Studio XIAO RP2040](https://wiki.seeedstudio.com/XIAO-RP2040/) | [Arduino Mbed OS RP2040 Boards](https://github.com/arduino/ArduinoCore-mbed) | [ESP32C3-WROOM-02](https://www.espressif.com/sites/default/files/documentation/esp32-c3-wroom-02_datasheet_en.pdf) | [v2.4.2.0](https://dl.espressif.com/esp-at/firmwares/esp32c3/ESP32-C3-MINI-1-AT-V2.4.2.0.zip) | Follow chip pinout to determine right pin function. Silk printing on board is for [other framework](https://github.com/earlephilhower/arduino-pico). | [@maehara-keisuke](https://github.com/maehara-keisuke) |

## How to use the precompiled library

### Arduino IDE
Expand Down
31 changes: 29 additions & 2 deletions examples/micro-ros_publisher_wifi/micro-ros_publisher_wifi.ino
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
// If you use "ESP-AT External WiFi module"(hereinafter called "ESP-AT") with your board,
// Install "WiFiEspAT" from Library Manager and uncomment definition below.
// See https://www.espressif.com/en/products/sdks/esp-at/overview for more details about ESP-AT.
// #define USE_WIFI_ESP_AT

#if defined(USE_WIFI_ESP_AT)
#define BOARD_WITH_ESP_AT
// Configurations about communication between Host MCU and ESP-AT.
// In most cases, you would burn ESP-AT firmware v2 or later. And you should uncomment "#define WIFIESPAT1" in EspAtDrvTypes.h
// See https://github.com/JAndrassy/WiFiEspAT/tree/7f398e14f331fc845c4af671f1946fe3f29a744f#getting-started for more details.
#define ESP_AT_SERIAL_PORT Serial1 // Serial port object to ESP-AT
#define ESP_AT_BAUDRATE 115200 // Baudrate setting in ESP-AT firmware(default is 115200)
#define ESP_AT_RESET_PIN -1 // GPIO_PIN connected to ESP-AT's reset pin(-1 means not to use hardware reset)
#endif

#include <micro_ros_arduino.h>

#if defined(BOARD_WITH_ESP_AT)
#include <wifi_transport.cpp>
#endif

#include <stdio.h>
#include <rcl/rcl.h>
#include <rcl/error_handling.h>
Expand All @@ -8,8 +27,16 @@

#include <std_msgs/msg/int32.h>

#if !defined(ESP32) && !defined(TARGET_PORTENTA_H7_M7) && !defined(ARDUINO_NANO_RP2040_CONNECT) && !defined(ARDUINO_WIO_TERMINAL)
#error This example is only avaible for Arduino Portenta, Arduino Nano RP2040 Connect, ESP32 Dev module and Wio Terminal
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL)
#define BOARD_HAS_NATIVE_WIFI
#endif

#if !defined(BOARD_HAS_NATIVE_WIFI) && !defined(BOARD_WITH_ESP_AT)
#error This example is only available for Arduino Portenta, Arduino Nano RP2040 Connect, ESP32 Dev module, Wio Terminal, and other boards with ESP-AT.
#endif

#if defined(BOARD_HAS_NATIVE_WIFI) && defined(BOARD_WITH_ESP_AT)
#error USE_WIFI_ESP_AT is not supported on boards that have native WiFi.
#endif

rcl_publisher_t publisher;
Expand Down
13 changes: 12 additions & 1 deletion src/micro_ros_arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ static inline void set_microros_native_ethernet_udp_transports(byte mac[], IPAdd

#endif

#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL)
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL) || defined(BOARD_WITH_ESP_AT)

#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7)
#include <WiFi.h>
Expand All @@ -106,6 +106,8 @@ static inline void set_microros_native_ethernet_udp_transports(byte mac[], IPAdd
#elif defined(ARDUINO_WIO_TERMINAL)
#include <rpcWiFi.h>
#include <WiFiUdp.h>
#elif defined(BOARD_WITH_ESP_AT)
#include <WiFiEspAT.h>
#endif

extern "C" bool arduino_wifi_transport_open(struct uxrCustomTransport * transport);
Expand All @@ -121,6 +123,15 @@ struct micro_ros_agent_locator {

static inline void set_microros_wifi_transports(char * ssid, char * pass, char * agent_ip, uint agent_port){

#if defined(BOARD_WITH_ESP_AT)
ESP_AT_SERIAL_PORT.begin(ESP_AT_BAUDRATE);
while (!ESP_AT_SERIAL_PORT) {
}
WiFi.init(ESP_AT_SERIAL_PORT, ESP_AT_RESET_PIN);
while (WiFi.status() == WL_NO_MODULE) {
}
#endif

WiFi.begin(ssid, pass);

while (WiFi.status() != WL_CONNECTED) {
Expand Down
4 changes: 3 additions & 1 deletion src/wifi_transport.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL)
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL) || defined(BOARD_WITH_ESP_AT)
#include <Arduino.h>


Expand All @@ -11,6 +11,8 @@
#elif defined(ARDUINO_WIO_TERMINAL)
#include <rpcWiFi.h>
#include <WiFiUdp.h>
#elif defined(BOARD_WITH_ESP_AT)
#include <WiFiEspAT.h>
#endif

#include <micro_ros_arduino.h>
Expand Down