Skip to content

Commit c14c4e3

Browse files
WiFiEspAT Support (micro-ROS#1425) (micro-ROS#1443)
* Extend set_microros_wifi_transport(). Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Enable each function if BOARD_WITH_ESP_AT is defined. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Enable to compile publisher_wifi example if USE_WIFI_ESP_AT is defined. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Follow CI. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Markdown table formattings. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Add section for ESP-AT module. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Revert micro-ros_publisher_wifi. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Minor: fix typo. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Add new example for ESP-AT. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Follow CI. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Simplify description about ESP-AT supported boards. Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> * Remove unnecessary build test. Co-authored-by: Antonio Cuadros <49162117+Acuadros95@users.noreply.github.com> --------- Signed-off-by: maehara-keisuke <mk.rosjp@gmail.com> Co-authored-by: Antonio Cuadros <49162117+Acuadros95@users.noreply.github.com> (cherry picked from commit f78b91c) Co-authored-by: maehara-keisuke <61191940+maehara-keisuke@users.noreply.github.com>
1 parent 76de97b commit c14c4e3

File tree

6 files changed

+129
-21
lines changed

6 files changed

+129
-21
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ jobs:
5454
arduino-cli lib install WiFiNINA
5555
arduino-cli lib install "STM32duino X-NUCLEO-IKS01A3"
5656
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.
57+
arduino-cli lib install WiFiEspAT
5758
# Build all demos
5859
arduino-cli compile --fqbn OpenCR:OpenCR:OpenCR /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher -v
5960
arduino-cli compile --fqbn OpenCR:OpenCR:OpenCR /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_addtwoints_service -v
@@ -81,3 +82,5 @@ jobs:
8182
arduino-cli compile --fqbn esp32:esp32:esp32 /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher -v
8283
arduino-cli compile --fqbn esp32:esp32:esp32 /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher_wifi -v
8384
arduino-cli compile --fqbn Seeeduino:samd:seeed_wio_terminal /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher_wifi -v
85+
# Build micro-ros_publisher-wifi_at for WiFi non-native board with ESP-AT
86+
arduino-cli compile --fqbn arduino:mbed:pico /github/home/Arduino/libraries/micro_ros_arduino/examples/micro-ros_publisher_wifi_at -v

README.md

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,30 @@ As the build process for ROS 2 and micro-ROS is based on custom meta-build syste
2424

2525
Supported boards are:
2626

27-
| Board | Min version | State | Details | .meta file |
28-
| ----------------------------------------------------------------------------------- | ----------- | ---------- | --------------------------------------------------------------------------------------------------- | ------------------------ |
29-
| [Arduino Portenta H7 M7 Core](https://store.arduino.cc/portenta-h7) | v1.8.5 | Supported | Official Arduino support | `colcon.meta` |
30-
| [Arduino Nano RP2040 Connect](https://docs.arduino.cc/hardware/nano-rp2040-connect) | v1.8.5 | Supported | Official Arduino support | `colcon_verylowmem.meta` |
31-
| [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` |
32-
| [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` |
33-
| [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` |
34-
| [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` |
35-
| [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` |
36-
| [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` |
37-
| [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` |
27+
| Board | Min version | State | Details | .meta file |
28+
| ----------------------------------------------------------------------------------------------------------- | ----------- | ---------- | ---------------------------------------------------------------------------------------------------- | ------------------------ |
29+
| [Arduino Portenta H7 M7 Core](https://store.arduino.cc/portenta-h7) | v1.8.5 | Supported | Official Arduino support | `colcon.meta` |
30+
| [Arduino Nano RP2040 Connect](https://docs.arduino.cc/hardware/nano-rp2040-connect) | v1.8.5 | Supported | Official Arduino support | `colcon_verylowmem.meta` |
31+
| [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` |
32+
| [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` |
33+
| [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` |
34+
| [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` |
35+
| [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` |
36+
| [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` |
37+
| [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` |
3838

3939
Community contributed boards are:
4040

41-
| Board | Min version | Contributor | Details | .meta file |
42-
| ---------------------------------------------------------------------------------------- | ----------- | ---------------------------------------------- | ------- | ------------------------ |
43-
| [Arduino Due](https://store.arduino.cc/arduino-due) | - | [@lukicdarkoo](https://github.com/lukicdarkoo) | | `colcon_verylowmem.meta` |
44-
| [Arduino Zero](https://store.arduino.cc/arduino-zero) | - | [@lukicdarkoo](https://github.com/lukicdarkoo) | | `colcon_verylowmem.meta` |
45-
| [Kakute F7](http://www.holybro.com/product/kakute-f7-aio-v1-5/) | - | [@amfern](https://github.com/amfern) | | `colcon.meta` |
46-
| [STM32-E407](https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407.pdf) | - | [@dominikn](https://github.com/dominikn) | | `colcon.meta` |
47-
| [Wio Terminal](https://wiki.seeedstudio.com/Wio-Terminal-Getting-Started/) | - | [@maehara-keisuke](https://github.com/maehara-keisuke) | | `colcon.meta` |
41+
| Board | Min version | Contributor | Details | .meta file |
42+
| ---------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------ | ------------------------------------------------------------------------- | ------------------------ |
43+
| [Arduino Due](https://store.arduino.cc/arduino-due) | - | [@lukicdarkoo](https://github.com/lukicdarkoo) | | `colcon_verylowmem.meta` |
44+
| [Arduino Zero](https://store.arduino.cc/arduino-zero) | - | [@lukicdarkoo](https://github.com/lukicdarkoo) | | `colcon_verylowmem.meta` |
45+
| [Kakute F7](http://www.holybro.com/product/kakute-f7-aio-v1-5/) | - | [@amfern](https://github.com/amfern) | | `colcon.meta` |
46+
| [STM32-E407](https://www.olimex.com/Products/ARM/ST/STM32-E407/resources/STM32-E407.pdf) | - | [@dominikn](https://github.com/dominikn) | | `colcon.meta` |
47+
| [Wio Terminal](https://wiki.seeedstudio.com/Wio-Terminal-Getting-Started/) | - | [@maehara-keisuke](https://github.com/maehara-keisuke) | | `colcon.meta` |
48+
| [Raspberry Pi Pico](https://www.raspberrypi.com/documentation/microcontrollers/) | - | [@maehara-keisuke](https://github.com/maehara-keisuke) | with [ESP-AT](https://www.espressif.com/en/products/sdks/esp-at/overview) | `colcon_verylowmem.meta` |
49+
| [Seeed Studio XIAO SAMD21](https://wiki.seeedstudio.com/Seeeduino-XIAO/) | - | [@maehara-keisuke](https://github.com/maehara-keisuke) | with [ESP-AT](https://www.espressif.com/en/products/sdks/esp-at/overview) | `colcon_verylowmem.meta` |
50+
| [Seeed Studio XIAO RP2040](https://wiki.seeedstudio.com/XIAO-RP2040/) | - | [@maehara-keisuke](https://github.com/maehara-keisuke) | with [ESP-AT](https://www.espressif.com/en/products/sdks/esp-at/overview) | `colcon_verylowmem.meta` |
4851

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

examples/micro-ros_publisher_wifi/micro-ros_publisher_wifi.ino

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <std_msgs/msg/int32.h>
1010

1111
#if !defined(ESP32) && !defined(TARGET_PORTENTA_H7_M7) && !defined(ARDUINO_NANO_RP2040_CONNECT) && !defined(ARDUINO_WIO_TERMINAL)
12-
#error This example is only avaible for Arduino Portenta, Arduino Nano RP2040 Connect, ESP32 Dev module and Wio Terminal
12+
#error This example is only available for Arduino Portenta, Arduino Nano RP2040 Connect, ESP32 Dev module and Wio Terminal
1313
#endif
1414

1515
rcl_publisher_t publisher;
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// To use "ESP-AT External WiFi module"(hereinafter called "ESP-AT") with your board, install "WiFiEspAT" from Library Manager.
2+
// See https://www.espressif.com/en/products/sdks/esp-at/overview for more details about ESP-AT.
3+
4+
#define BOARD_WITH_ESP_AT
5+
// Configurations about communication between Host MCU and ESP-AT.
6+
// In most cases, you would burn ESP-AT firmware v2 or later. And you should uncomment "#define WIFIESPAT1" in EspAtDrvTypes.h
7+
// See https://github.com/JAndrassy/WiFiEspAT/tree/7f398e14f331fc845c4af671f1946fe3f29a744f#getting-started for more details.
8+
#define ESP_AT_SERIAL_PORT Serial1 // Serial port object to ESP-AT
9+
#define ESP_AT_BAUDRATE 115200 // Baudrate setting in ESP-AT firmware(default is 115200)
10+
#define ESP_AT_RESET_PIN -1 // GPIO_PIN connected to ESP-AT's reset pin(-1 means not to use hardware reset)
11+
12+
#include <micro_ros_arduino.h>
13+
14+
#include <wifi_transport.cpp>
15+
16+
#include <stdio.h>
17+
#include <rcl/rcl.h>
18+
#include <rcl/error_handling.h>
19+
#include <rclc/rclc.h>
20+
#include <rclc/executor.h>
21+
22+
#include <std_msgs/msg/int32.h>
23+
24+
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL)
25+
#define BOARD_HAS_NATIVE_WIFI
26+
#endif
27+
28+
#if defined(BOARD_HAS_NATIVE_WIFI)
29+
#error This example is not available for boards that have native WiFi.
30+
#endif
31+
32+
rcl_publisher_t publisher;
33+
std_msgs__msg__Int32 msg;
34+
rclc_support_t support;
35+
rcl_allocator_t allocator;
36+
rcl_node_t node;
37+
38+
#define LED_PIN 13
39+
40+
#define RCCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){error_loop();}}
41+
#define RCSOFTCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){}}
42+
43+
44+
void error_loop(){
45+
while(1){
46+
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
47+
delay(100);
48+
}
49+
}
50+
51+
void timer_callback(rcl_timer_t * timer, int64_t last_call_time)
52+
{
53+
RCLC_UNUSED(last_call_time);
54+
if (timer != NULL) {
55+
RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL));
56+
msg.data++;
57+
}
58+
}
59+
60+
void setup() {
61+
set_microros_wifi_transports("WIFI SSID", "WIFI PASS", "192.168.1.57", 8888);
62+
63+
pinMode(LED_PIN, OUTPUT);
64+
digitalWrite(LED_PIN, HIGH);
65+
66+
delay(2000);
67+
68+
allocator = rcl_get_default_allocator();
69+
70+
//create init_options
71+
RCCHECK(rclc_support_init(&support, 0, NULL, &allocator));
72+
73+
// create node
74+
RCCHECK(rclc_node_init_default(&node, "micro_ros_arduino_wifi_node", "", &support));
75+
76+
// create publisher
77+
RCCHECK(rclc_publisher_init_best_effort(
78+
&publisher,
79+
&node,
80+
ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32),
81+
"topic_name"));
82+
83+
msg.data = 0;
84+
}
85+
86+
void loop() {
87+
RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL));
88+
msg.data++;
89+
}

src/micro_ros_arduino.h

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ static inline void set_microros_native_ethernet_udp_transports(byte mac[], IPAdd
9595

9696
#endif
9797

98-
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL)
98+
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL) || defined(BOARD_WITH_ESP_AT)
9999

100100
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7)
101101
#include <WiFi.h>
@@ -106,6 +106,8 @@ static inline void set_microros_native_ethernet_udp_transports(byte mac[], IPAdd
106106
#elif defined(ARDUINO_WIO_TERMINAL)
107107
#include <rpcWiFi.h>
108108
#include <WiFiUdp.h>
109+
#elif defined(BOARD_WITH_ESP_AT)
110+
#include <WiFiEspAT.h>
109111
#endif
110112

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

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

126+
#if defined(BOARD_WITH_ESP_AT)
127+
ESP_AT_SERIAL_PORT.begin(ESP_AT_BAUDRATE);
128+
while (!ESP_AT_SERIAL_PORT) {
129+
}
130+
WiFi.init(ESP_AT_SERIAL_PORT, ESP_AT_RESET_PIN);
131+
while (WiFi.status() == WL_NO_MODULE) {
132+
}
133+
#endif
134+
124135
WiFi.begin(ssid, pass);
125136

126137
while (WiFi.status() != WL_CONNECTED) {

src/wifi_transport.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL)
1+
#if defined(ESP32) || defined(TARGET_PORTENTA_H7_M7) || defined(ARDUINO_NANO_RP2040_CONNECT) || defined(ARDUINO_WIO_TERMINAL) || defined(BOARD_WITH_ESP_AT)
22
#include <Arduino.h>
33

44

@@ -11,6 +11,8 @@
1111
#elif defined(ARDUINO_WIO_TERMINAL)
1212
#include <rpcWiFi.h>
1313
#include <WiFiUdp.h>
14+
#elif defined(BOARD_WITH_ESP_AT)
15+
#include <WiFiEspAT.h>
1416
#endif
1517

1618
#include <micro_ros_arduino.h>

0 commit comments

Comments
 (0)