Generic Pelion Device Management example for various Advantech modules.
This example is known to work great on the following platforms:
- WISE-1530 WiFi Module using DB-1505 carrier board and external SD card reader.
Example Functionality
This example showcases the following device functionality:
- On timer button increment, simulate Pelion LWM2M button resource change
Use this example with Mbed CLI
1. Import the application into your desktop:
mbed import https://os.mbed.com/teams/Advantech/code/pelion-example-common cd pelion-example-common
2. Download your developer certificate from pelion portal
3. Compile the program
mbed compile -t <toolchain> -m <TARGET_BOARD>
(supported toolchains : GCC_ARM / ARM / IAR)
4. Copy the binary file pelion-example-common.bin to your mbed device.
Diff: drivers/network/COMPONENT_WIFI_ESP32/ESP32Interface.cpp
- Revision:
- 0:43ff9e3bc244
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drivers/network/COMPONENT_WIFI_ESP32/ESP32Interface.cpp Tue Mar 12 13:48:39 2019 +0800 @@ -0,0 +1,221 @@ +/* ESP32 implementation of NetworkInterfaceAPI + * Copyright (c) 2017 Renesas Electronics Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <string.h> +#include "ESP32Interface.h" + +// ESP32Interface implementation +ESP32Interface::ESP32Interface() : + ESP32Stack(MBED_CONF_ESP32_WIFI_EN, MBED_CONF_ESP32_WIFI_IO0, MBED_CONF_ESP32_WIFI_TX, MBED_CONF_ESP32_WIFI_RX, MBED_CONF_ESP32_WIFI_DEBUG, MBED_CONF_ESP32_WIFI_RTS, MBED_CONF_ESP32_WIFI_CTS, MBED_CONF_ESP32_WIFI_BAUDRATE), + _dhcp(true), + _ap_ssid(), + _ap_pass(), + _ap_sec(NSAPI_SECURITY_NONE), + _ip_address(), + _netmask(), + _gateway(), + _connection_status(NSAPI_STATUS_DISCONNECTED), + _connection_status_cb(NULL) +{ + _esp->attach_wifi_status(callback(this, &ESP32Interface::wifi_status_cb)); +} + +ESP32Interface::ESP32Interface(PinName en, PinName io0, PinName tx, PinName rx, bool debug, + PinName rts, PinName cts, int baudrate) : + ESP32Stack(en, io0, tx, rx, debug, rts, cts, baudrate), + _dhcp(true), + _ap_ssid(), + _ap_pass(), + _ap_sec(NSAPI_SECURITY_NONE), + _ip_address(), + _netmask(), + _gateway(), + _connection_status(NSAPI_STATUS_DISCONNECTED), + _connection_status_cb(NULL) +{ + _esp->attach_wifi_status(callback(this, &ESP32Interface::wifi_status_cb)); +} + +ESP32Interface::ESP32Interface(PinName tx, PinName rx, bool debug) : + ESP32Stack(NC, NC, tx, rx, debug, NC, NC, 230400), + _dhcp(true), + _ap_ssid(), + _ap_pass(), + _ap_sec(NSAPI_SECURITY_NONE), + _ip_address(), + _netmask(), + _gateway(), + _connection_status(NSAPI_STATUS_DISCONNECTED), + _connection_status_cb(NULL) +{ + _esp->attach_wifi_status(callback(this, &ESP32Interface::wifi_status_cb)); +} + +nsapi_error_t ESP32Interface::set_network(const char *ip_address, const char *netmask, const char *gateway) +{ + _dhcp = false; + + strncpy(_ip_address, ip_address ? ip_address : "", sizeof(_ip_address)); + _ip_address[sizeof(_ip_address) - 1] = '\0'; + strncpy(_netmask, netmask ? netmask : "", sizeof(_netmask)); + _netmask[sizeof(_netmask) - 1] = '\0'; + strncpy(_gateway, gateway ? gateway : "", sizeof(_gateway)); + _gateway[sizeof(_gateway) - 1] = '\0'; + + return NSAPI_ERROR_OK; +} + +nsapi_error_t ESP32Interface::set_dhcp(bool dhcp) +{ + _dhcp = dhcp; + + return NSAPI_ERROR_OK; +} + +int ESP32Interface::connect(const char *ssid, const char *pass, nsapi_security_t security, + uint8_t channel) +{ + if (channel != 0) { + return NSAPI_ERROR_UNSUPPORTED; + } + + set_credentials(ssid, pass, security); + return connect(); +} + +int ESP32Interface::connect() +{ + if (!_esp->dhcp(_dhcp, 1)) { + return NSAPI_ERROR_DHCP_FAILURE; + } + + if (!_dhcp) { + if (!_esp->set_network(_ip_address, _netmask, _gateway)) { + return NSAPI_ERROR_DEVICE_ERROR; + } + } + + set_connection_status(NSAPI_STATUS_CONNECTING); + if (!_esp->connect(_ap_ssid, _ap_pass)) { + set_connection_status(NSAPI_STATUS_DISCONNECTED); + return NSAPI_ERROR_NO_CONNECTION; + } + + return NSAPI_ERROR_OK; +} + +int ESP32Interface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security) +{ + memset(_ap_ssid, 0, sizeof(_ap_ssid)); + strncpy(_ap_ssid, ssid, sizeof(_ap_ssid)); + + memset(_ap_pass, 0, sizeof(_ap_pass)); + strncpy(_ap_pass, pass, sizeof(_ap_pass)); + + _ap_sec = security; + + return 0; +} + +int ESP32Interface::set_channel(uint8_t channel) +{ + return NSAPI_ERROR_UNSUPPORTED; +} + +int ESP32Interface::disconnect() +{ + if (!_esp->disconnect()) { + return NSAPI_ERROR_DEVICE_ERROR; + } + + return NSAPI_ERROR_OK; +} + +const char *ESP32Interface::get_ip_address() +{ + return _esp->getIPAddress(); +} + +const char *ESP32Interface::get_mac_address() +{ + return _esp->getMACAddress(); +} + +const char *ESP32Interface::get_gateway() +{ + return _esp->getGateway(); +} + +const char *ESP32Interface::get_netmask() +{ + return _esp->getNetmask(); +} + +int8_t ESP32Interface::get_rssi() +{ + return _esp->getRSSI(); +} + +int ESP32Interface::scan(WiFiAccessPoint *res, unsigned count) +{ + return _esp->scan(res, count); +} + +void ESP32Interface::attach(mbed::Callback<void(nsapi_event_t, intptr_t)> status_cb) +{ + _connection_status_cb = status_cb; +} + +nsapi_connection_status_t ESP32Interface::get_connection_status() const +{ + return _connection_status; +} + +void ESP32Interface::set_connection_status(nsapi_connection_status_t connection_status) +{ + if (_connection_status != connection_status) { + _connection_status = connection_status; + if (_connection_status_cb) { + _connection_status_cb(NSAPI_EVENT_CONNECTION_STATUS_CHANGE, _connection_status); + } + } +} + +void ESP32Interface::wifi_status_cb(int8_t wifi_status) +{ + switch (wifi_status) { + case ESP32::STATUS_DISCONNECTED: + set_connection_status(NSAPI_STATUS_DISCONNECTED); + break; + case ESP32::STATUS_GOT_IP: + set_connection_status(NSAPI_STATUS_GLOBAL_UP); + break; + case ESP32::STATUS_CONNECTED: + default: + // do nothing + break; + } +} + +#if MBED_CONF_ESP32_PROVIDE_DEFAULT + +WiFiInterface *WiFiInterface::get_default_instance() { + static ESP32Interface esp32; + return &esp32; +} + +#endif +