- backend using elixir
- frontend using Eclipse Paho
- meshnet using esp-mdf
Install esp-mdf and the Espressif IDF VS Code extension. Ignore the "Welcome to the extension setup" page, instead open the command palette and select ESP-IDF: Configure Paths
> IDF_PATH
> ${env:HOME}/esp/esp-mdf/esp-idf/
, this avoids downloading esp-idf
twice.
To set up the pub/sub connection, open a terminal in the workspace and enter . ~/esp/esp-mdf/export.sh
, then select idf.py menuconfig
> Example Configuration
> MQTT broker URL
> mqtt://0.0.0.0:1883
, replacing 0.0.0.0
with the address of your MQTT broker. You can also set the network SSID and password from this menu, the defaults are QuickTest
and Testing123
. Finally, you can run a broker like Mosquitto on the same network, here is a basic config that also connects it to the frontend:
#/etc/mosquitto/mosquitto.conf
port 1883
protocol mqtt
listener 8083
protocol websockets
Each node will publish bluetooth information and network topology changes to the broker:
mosquitto_sub -h localhost -t "mesh/+/toCloud"
mosquitto_sub -h localhost -t "mesh/+/topo"
ninja
will get stuck in an endless build loop because it uses timestamps to find dirty targets, but apparently not with sub 24-hour resolution. Be sure to run find . -exec touch -d "2 days ago" {} +
after git clone
and before idf.py build
.
Flashing and monitoring might fail if serial ports are busy, try sudo systemctl stop serial-getty@USB0.service
if you get device reports readiness to read but returned no data
errors.
The backend uses gen_tcp and Plug.Cowboy, start it with mix run
and open http://127.0.0.1:8080/panel.html
. The backend does not need to be running to use pub/sub messages.
The frontend can be opened in a browser as-is.
- Less redundant message formats, right now the nodes publish nested JSONs that include their MAC address twice.
- Better multithreading than FreeRTOS tasks, ideally bluetooth scan results should be added to a shared queue from one thread and published to MQTT from another.
- Cool interactive canvas visuals on the frontend.