This is a pure transparent bridge between Wifi and serial using any ESP8266 device for RN2483 LoraWAN module. It's very useful for testing or talking to remote serial device such as RN2483 that have no network connection. It's dedicated to works with WeMos RN2483 shield and I'm Using it with The Things Network LoraWan Backend but you can use other provider.
I'm using it on WeMos target, you can find more information on WeMos on their site, it's really well documented.
This project is mainly based on excellent @me-no-dev ESPAsyncWebServer library and great JQuery Terminal done by Jakub Jankiewicz.
Once uploaded SPIFFS data (web page) you can connect with a browser to http://ip_of_esp8266
and start playing with it.
The main index.htm
web page include a full javascript terminal so you can type command and receive response.
The main web page can also be hosted anywhere and it's not mandatory to have it on the device (except if device and your computer have no access on Internet). I've published the fully fonctionnal WEB page from github so you can access it from here and then connect to your device on wich you flashed the firmware.
Some commands will be interpreted by the target (ESP8266) and not passed to serial, so you can interact with ESP8266 doing some variable stuff.
First time setup (assuming you're using the RN2483 shield)
- Register your device on TTN before using and obtain APP_EUI, APP_KEY and DEV_EUI from TTN
- Setup WiFi SSID/Password into the sketch (the .ino file)
- Setup Web Editor login/password into the sketch
- Compile and flash the device
- Connect to the device IP (seen after connect on Serial Monitor) http://your_IP
- Type
connect
to connect to the local device, one connected check all is fine typing sys get ver
=> should return someting likeRN2483 1.0.1 Dec 15 2015 09:38:09
- if not try reseting module wit
reset 12
and retry until banner mac set appeui YOUR_APP_EUI
mac set appkey YOUR_APP_KEY
mac set deveui YOUR_DEV_EUI
mac save
mac join otaa
Then wait for ok
and accepted
, then you're in!
Push button (long press for different behaviour)
- pressed lower than 1 second will just send packet
- pressed between 1 and 2 seconds (led blink purple)=> send packet with ACK
- pressed between 2 and 3 seconds (led blink green) => enable autosend packet every 300 seconds
- pressed between 3 and 4 seconds (led blink yellow)=> disable autosend packet
PS : If you just want hardware is okay, use the simplified check-rn2483
sketch
You need to have nodejs and some dependencies installed npm install zlib
.
webdev folder is the development folder to test and validate web pages. It's used to avoid flashing the device on each modification.
All source files are located in this folder the ESP8266 data
folder (containing web pages) is filled by a nodejs script launched from webdev folder. This repo contain in data latest files so if you don't change any file, you can upload to SPIFFS as is.
To test web pages, go to a command line, go into webdev folder and issue a:
node web_server.js
then connect your browser to htpp://localhost:8080 you can them modidy and test source files such index.htm
Once all is okay issue a:
node create_spiffs.js
this will gzip file and put them into data folder, after that you can upload from Arduino IDE to device SPIFFS
See comments in both create_spiffs.js and web_server.js files, it's also indicated dependencies needed by nodejs.
You can also afterward edit file directly from device with integrated editor, very usefull to change configuration files for example. http://your_device_ip/edit.htm with login pass (admin/admin)
- connect : connect do target device
- help : show help
!close
or CTRL-D : close connectionswap
swap ESP8266 UART pin between GPIO1/GPIO3 with GPIO15/GPIO13ping
typing ping on terminal and ESP8266 will send back pong?
orhelp
show helpheap
show ESP8266 free RAMwhoami
show WebSocket client # we arewho
show all WebSocket clients connectedsend second
auto send data each second (0=disable send)fw
show firmware date/timebaud
display ESP8266 serial baud rate configbaud n
set ESP8266 serial baud rate to n (to be compatble with device driven)rgb l
set RGB Led luminosity l (0..100)reset p
reset gpio pin number pls
list SPIFFS filesread file
execute SPIFFS file commandhostname
show network hostname of devicerestart
reset ESP8266 (reboot)debug
show debug informationcat file
display content of fileup type
send uplink message (type 0=unconfirmed type 1=confirmed)
Every command in file startup.ini
are executed in setup()
you can chain with other files.
I'm using this sketch to drive Microchip RN2483 Lora module to test LoraWan, see the boards I used.
For example my startup.ini
file contains command to read microchip RN2483 config file named rn2483-cfg.txt
then chain to join otaa with file rn2483-ttn-otaa.txt
startup.ini
# Startup config file executed once in setup()
# commands prefixed by ! are executed by ESP
# all others passed to serial module
# Set Onboard RGB LED luminosity (0=off 100=full light)
!rgb 50
# Microchip Lora rn2483 configuration
!read /rn2483-cfg.txt
# Join ttn in otaa mode
!read /rn2483-ttn-otaa.txt
RN2483 configuration file example for RN2483 shield rn2483-cfg.txt
# Startup config file for Microchip RN2483
# commands prefixed by ! or $ are executed by ESP all others passed to serial module
# command starting with $ wait until device return \n
# RN2483 always return string followed by "\r\n" on each command (ex "ok\r\n")
# so $ wait a response (good or not) before sending next command
# !delay or any $ are not executed when connected via browser web terminal (websocket)
# See schematics here https://github.com/hallard/WeMos-RN2483
# Set ESP Module serial speed (RN2483 is 57600)
# as reminder, it's now done in sketch
# !baud 57600
# !delay 50
# For Hardware boards V1.1+
# -------------------------
# reset RN2483 module
$reset 12
# !baud 57600
# !delay 50
# Wired GPIO to output
$sys set pinmode GPIO1 digout
$sys set pinmode GPIO10 digout
# Light on the LED on all GPIO
$sys set pindig GPIO1 1
$sys set pindig GPIO10 1
# Custom config here
# ------------------
# Set Power Max
$radio set pwr 14
RN2483 join TTN otaa configuration file example for RN2483 shield rn2483-otaa.txt
# Startup config file for Microchip RN2483 join TTN in otaa
# commands prefixed by ! or $ are executed by ESP all others passed to serial module (RN2483)
# command starting with $ wait until device return \n
# RN2483 always return string followed by "\r\n" on each command (ex "ok\r\n")
# so $ wait a response (good or not) before sending next command
# !delay or any $ are not executed when connected via browser web terminal (websocket)
# See schematics here https://github.com/hallard/WeMos-RN2483
# Your device should have been registered on TTN before using, here is how to
# On the RN2483, use `sys get hweui` and `mac get deveui`
# you then get the devices hweui & deveui, They are probably the same
# then register device on TTN console dashboard
# Then you must setup your keys (obtained from TTN console dashboard)
# Personnaly I prefer setup the 3 fixed values in TTN dashboard
# then put them into the RN2483 module
# then on RN2483 device (1st setup, then don't need to be set again)
# $mac set appeui YOUR_APP_EUI
# $mac set appkey YOUR_APP_KEY
# $mac set deveui YOUR_DEV_EUI
# and saved with `mac save`
# $mac save
# Then Join TTN Network
$mac join otaa
See all in action
http://cdn.rawgit.com/hallard/WeMos-rn2483-firmware/master/WeMos-rn2483/webdev/index.htm
By the way I integrated the excellent @me-no-dev SPIFFS Web editor so you can direct edit configuration files of SPIFFS going to
http://your_module_ip/edit
Your computer need to be connected to Internet (so may be your ESP8266 device) and authenticated for this feature, default login/pass are in the sketch (admin/admin)
- More configuration features
- Add configuration file for SSID/PASSWORD and login/pass for http admin access
- Add some event on push button
- Add listening mode (Class C) feature
- Add sensor data sending
- Add some I2C OLED display
- Better LED Management
If you add some features, don't hesitate to do a pull request so I can merge your changes.
- Arduino ESP8266
- @me-no-dev ESPAsyncWebServer library
- @me-no-dev ESPAsyncTCP library
- nodejs for web pages development test
See news and other projects on my blog