Added compatibility with ESP8266 platform

This commit is contained in:
jgromes 2019-07-31 07:25:04 +02:00
parent 3f0dc11008
commit e751d31aa9
5 changed files with 48 additions and 36 deletions

View file

@ -5,6 +5,7 @@ env:
- BOARD="arduino:avr:uno" - BOARD="arduino:avr:uno"
- BOARD="arduino:avr:leonardo" - BOARD="arduino:avr:leonardo"
- BOARD="arduino:avr:mega:cpu=atmega2560" - BOARD="arduino:avr:mega:cpu=atmega2560"
- BOARD="esp8266:esp8266:generic:xtal=80,ResetMethod=ck,CrystalFreq=26,FlashFreq=40,FlashMode=qio,eesz=512K"
before_install: before_install:
# install Arduino IDE # install Arduino IDE
@ -12,6 +13,7 @@ before_install:
- tar xf arduino-$ARDUINO_IDE_VERSION-linux64.tar.xz - tar xf arduino-$ARDUINO_IDE_VERSION-linux64.tar.xz
- mv arduino-$ARDUINO_IDE_VERSION $HOME/arduino-ide - mv arduino-$ARDUINO_IDE_VERSION $HOME/arduino-ide
- export PATH=$PATH:$HOME/arduino-ide - export PATH=$PATH:$HOME/arduino-ide
# firewall Arduino IDE noise (https://github.com/per1234/arduino-ci-script/issues/1#issuecomment-504158113) # firewall Arduino IDE noise (https://github.com/per1234/arduino-ci-script/issues/1#issuecomment-504158113)
- sudo iptables -P INPUT DROP - sudo iptables -P INPUT DROP
- sudo iptables -P FORWARD DROP - sudo iptables -P FORWARD DROP
@ -20,6 +22,12 @@ before_install:
- sudo iptables -A OUTPUT -o lo -j ACCEPT - sudo iptables -A OUTPUT -o lo -j ACCEPT
- sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT - sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# install 3rd party boards
- arduino --pref "boardsmanager.additional.urls=http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://dl.espressif.com/dl/package_esp32_index.json" --save-prefs 2>&1
- if [[ "$BOARD" =~ "esp8266:esp8266:" ]]; then
arduino --install-boards esp8266:esp8266;
fi
# create directory to save the library and create symbolic link # create directory to save the library and create symbolic link
install: install:
- mkdir -p $HOME/Arduino/libraries - mkdir -p $HOME/Arduino/libraries

View file

@ -39,7 +39,9 @@
#include "Module.h" #include "Module.h"
#include "modules/CC1101.h" #include "modules/CC1101.h"
#ifndef ESP8266
#include "modules/ESP8266.h" #include "modules/ESP8266.h"
#endif
#include "modules/HC05.h" #include "modules/HC05.h"
#include "modules/JDY08.h" #include "modules/JDY08.h"
#include "modules/nRF24.h" #include "modules/nRF24.h"

View file

@ -4,7 +4,7 @@
#if ARDUINO >= 100 #if ARDUINO >= 100
#include "Arduino.h" #include "Arduino.h"
#else #else
#include "WProgram.h" #error "Unsupported Arduino version (< 1.0.0)"
#endif #endif
//#define RADIOLIB_DEBUG //#define RADIOLIB_DEBUG
@ -71,52 +71,52 @@
/*! /*!
\brief Use 1 bit stop. \brief Use 1 bit stop.
*/ */
#define UART_STOPBIT_1 0x01 #define RADIOLIB_UART_STOPBIT_1 0x01
/*! /*!
\brief Use 1.5 bit stop. \brief Use 1.5 bit stop.
*/ */
#define UART_STOPBIT_1_5 0x02 #define RADIOLIB_UART_STOPBIT_1_5 0x02
/*! /*!
\brief Use 2 bit stop. \brief Use 2 bit stop.
*/ */
#define UART_STOPBIT_2 0x03 #define RADIOLIB_UART_STOPBIT_2 0x03
/*! /*!
\brief No parity. \brief No parity.
*/ */
#define UART_PARITY_NONE 0x00 #define RADIOLIB_UART_PARITY_NONE 0x00
/*! /*!
\brief Odd parity. \brief Odd parity.
*/ */
#define UART_PARITY_ODD 0x01 #define RADIOLIB_UART_PARITY_ODD 0x01
/*! /*!
\brief Even parity. \brief Even parity.
*/ */
#define UART_PARITY_EVEN 0x02 #define RADIOLIB_UART_PARITY_EVEN 0x02
/*! /*!
\brief No flow control. \brief No flow control.
*/ */
#define UART_FLOW_NONE 0x00 #define RADIOLIB_UART_FLOW_NONE 0x00
/*! /*!
\brief RTS only. \brief RTS only.
*/ */
#define UART_FLOW_RTS 0x01 #define RADIOLIB_UART_FLOW_RTS 0x01
/*! /*!
\brief CTS only. \brief CTS only.
*/ */
#define UART_FLOW_CTS 0x02 #define RADIOLIB_UART_FLOW_CTS 0x02
/*! /*!
\brief Both RTS and CTS. \brief Both RTS and CTS.
*/ */
#define UART_FLOW_BOTH 0x03 #define RADIOLIB_UART_FLOW_BOTH 0x03
/*! /*!
\} \}

View file

@ -1,3 +1,4 @@
#ifndef ESP8266
#include "ESP8266.h" #include "ESP8266.h"
ESP8266::ESP8266(Module* module) { ESP8266::ESP8266(Module* module) {
@ -9,15 +10,15 @@ int16_t ESP8266::begin(long speed) {
_mod->AtLineFeed = "\r\n"; _mod->AtLineFeed = "\r\n";
_mod->baudrate = speed; _mod->baudrate = speed;
_mod->init(USE_UART, INT_NONE); _mod->init(USE_UART, INT_NONE);
// empty UART buffer (garbage data) // empty UART buffer (garbage data)
_mod->ATemptyBuffer(); _mod->ATemptyBuffer();
// test AT setup // test AT setup
if(!_mod->ATsendCommand("AT")) { if(!_mod->ATsendCommand("AT")) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
return(ERR_NONE); return(ERR_NONE);
} }
@ -26,10 +27,10 @@ int16_t ESP8266::reset() {
if(!_mod->ATsendCommand("AT+RST")) { if(!_mod->ATsendCommand("AT+RST")) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
// wait for the module to start // wait for the module to start
delay(2000); delay(2000);
// test AT setup // test AT setup
uint32_t start = millis(); uint32_t start = millis();
while (millis() - start < 3000) { while (millis() - start < 3000) {
@ -39,7 +40,7 @@ int16_t ESP8266::reset() {
return(ERR_NONE); return(ERR_NONE);
} }
} }
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
@ -48,7 +49,7 @@ int16_t ESP8266::join(const char* ssid, const char* password) {
if(!_mod->ATsendCommand("AT+CWMODE_CUR=3")) { if(!_mod->ATsendCommand("AT+CWMODE_CUR=3")) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
// build AT command // build AT command
const char* atStr = "AT+CWJAP_CUR=\""; const char* atStr = "AT+CWJAP_CUR=\"";
uint8_t cmdLen = strlen(atStr) + strlen(ssid) + strlen(password) + 4; uint8_t cmdLen = strlen(atStr) + strlen(ssid) + strlen(password) + 4;
@ -58,19 +59,19 @@ int16_t ESP8266::join(const char* ssid, const char* password) {
strcat(cmd, "\",\""); strcat(cmd, "\",\"");
strcat(cmd, password); strcat(cmd, password);
strcat(cmd, "\""); strcat(cmd, "\"");
// send command // send command
bool res = _mod->ATsendCommand(cmd); bool res = _mod->ATsendCommand(cmd);
delete[] cmd; delete[] cmd;
if(!res) { if(!res) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
// disable multiple connection mode // disable multiple connection mode
if(!_mod->ATsendCommand("AT+CIPMUX=0")) { if(!_mod->ATsendCommand("AT+CIPMUX=0")) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
return(ERR_NONE); return(ERR_NONE);
} }
@ -79,7 +80,7 @@ int16_t ESP8266::openTransportConnection(const char* host, const char* protocol,
itoa(port, portStr, 10); itoa(port, portStr, 10);
char tcpKeepAliveStr[6]; char tcpKeepAliveStr[6];
itoa(tcpKeepAlive, tcpKeepAliveStr, 10); itoa(tcpKeepAlive, tcpKeepAliveStr, 10);
// build AT command // build AT command
const char* atStr = "AT+CIPSTART=\""; const char* atStr = "AT+CIPSTART=\"";
uint8_t cmdLen = strlen(atStr) + strlen(protocol) + strlen(host) + strlen(portStr) + 5; uint8_t cmdLen = strlen(atStr) + strlen(protocol) + strlen(host) + strlen(portStr) + 5;
@ -97,14 +98,14 @@ int16_t ESP8266::openTransportConnection(const char* host, const char* protocol,
strcat(cmd, ","); strcat(cmd, ",");
strcat(cmd, tcpKeepAliveStr); strcat(cmd, tcpKeepAliveStr);
} }
// send command // send command
bool res = _mod->ATsendCommand(cmd); bool res = _mod->ATsendCommand(cmd);
delete[] cmd; delete[] cmd;
if(!res) { if(!res) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
return(ERR_NONE); return(ERR_NONE);
} }
@ -124,19 +125,19 @@ int16_t ESP8266::send(const char* data) {
char* cmd = new char[strlen(atStr) + strlen(lenStr)]; char* cmd = new char[strlen(atStr) + strlen(lenStr)];
strcpy(cmd, atStr); strcpy(cmd, atStr);
strcat(cmd, lenStr); strcat(cmd, lenStr);
// send command // send command
bool res = _mod->ATsendCommand(cmd); bool res = _mod->ATsendCommand(cmd);
delete[] cmd; delete[] cmd;
if(!res) { if(!res) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
// send data // send data
if(!_mod->ATsendCommand(data)) { if(!_mod->ATsendCommand(data)) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
return(ERR_NONE); return(ERR_NONE);
} }
@ -148,26 +149,26 @@ int16_t ESP8266::send(uint8_t* data, uint32_t len) {
char* cmd = new char[strlen(atStr) + strlen(lenStr)]; char* cmd = new char[strlen(atStr) + strlen(lenStr)];
strcpy(cmd, atStr); strcpy(cmd, atStr);
strcat(cmd, lenStr); strcat(cmd, lenStr);
// send command // send command
bool res = _mod->ATsendCommand(cmd); bool res = _mod->ATsendCommand(cmd);
delete[] cmd; delete[] cmd;
if(!res) { if(!res) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
// send data // send data
if(!_mod->ATsendData(data, len)) { if(!_mod->ATsendData(data, len)) {
return(ERR_AT_FAILED); return(ERR_AT_FAILED);
} }
return(ERR_NONE); return(ERR_NONE);
} }
size_t ESP8266::receive(uint8_t* data, size_t len, uint32_t timeout) { size_t ESP8266::receive(uint8_t* data, size_t len, uint32_t timeout) {
size_t i = 0; size_t i = 0;
uint32_t start = millis(); uint32_t start = millis();
// wait until the required number of bytes is received or until timeout // wait until the required number of bytes is received or until timeout
while((millis() - start < timeout) && (i < len)) { while((millis() - start < timeout) && (i < len)) {
while(_mod->ModuleSerial->available() > 0) { while(_mod->ModuleSerial->available() > 0) {
@ -188,7 +189,7 @@ size_t ESP8266::getNumBytes(uint32_t timeout, size_t minBytes) {
return(0); return(0);
} }
} }
// read response // read response
char rawStr[20]; char rawStr[20];
uint8_t i = 0; uint8_t i = 0;
@ -205,17 +206,18 @@ size_t ESP8266::getNumBytes(uint32_t timeout, size_t minBytes) {
break; break;
} }
} }
// get the number of bytes in response // get the number of bytes in response
char* pch = strtok(rawStr, ",:"); char* pch = strtok(rawStr, ",:");
if(pch == NULL) { if(pch == NULL) {
return(0); return(0);
} }
pch = strtok(NULL, ",:"); pch = strtok(NULL, ",:");
if(pch == NULL) { if(pch == NULL) {
return(0); return(0);
} }
return(atoi(pch)); return(atoi(pch));
} }
#endif

View file

@ -1,4 +1,4 @@
#ifndef _RADIOLIB_ESP8266_H #if !defined(_RADIOLIB_ESP8266_H) && !defined(ESP8266)
#define _RADIOLIB_ESP8266_H #define _RADIOLIB_ESP8266_H
#include "Module.h" #include "Module.h"