CO NTROL SY STEM F OR RIGACIÓNDescargo de responsabilidad: este es un proyecto personal y no está afiliado a mi empleador
Cosyfir te ayudará a regar tus plantas.
El software de nodo se ejecuta en un microcontrolador STM32 ARM Cortex. El software del servidor se ejecuta en sistemas basados en UNIX como Debian. La siguiente imagen muestra una configuración de ejemplo:
[] / +--+ / o/
[] <-> | <-> | | <-> ( )( ) <-> |
/ LoRa | +--+ MQTT ( ) SSH /
Sensor LoRaWAN TTN RPi User
Node Gateway Server @home
./node/* (Not part of cosyfir) ./server/*
Este ReadMe describe tanto el servidor (por ejemplo, Raspberry Pi) como el software del nodo del sensor en las siguientes secciones.
La aplicación Cosyfird es un demonio, que recibe mensajes de nodos sensores a través del servidor TTN y muestra el último mensaje.
Instale los siguientes paquetes de software, por ejemplo, para Debian DO:
sudo apt install libncurses6 libmosquittopp1 libssl1.1 libyaml-cpp0.6 gcc cmake libjsoncpp1 libb64-0d
Se requiere un compilador C ++ 17. Se recomienda GCC 8.3.0.
Esta sección describe el software del nodo del sensor que se comunica en base a Lora y TTN.
LSN50-V2 probablemente debería funcionar también.
Instale los siguientes paquetes:
sudo apt install stm32flash arm-none-eabi-gcc
Antes de construir los binarios, registre su aplicación CosyFir en el sitio web de TTN.
La siguiente es una plantilla de archivo de configuración YAML para Cosyfird:
MqttConfig :
HostAddress : region.thethings.network
Port : 8883
ClientId : application-id
Password : secret TTN utiliza el puerto 8883 con SSL y la region.thethings.network de la dirección de host.thethings.network donde region puede ser, por ejemplo, eu .
En primer lugar, cree un identificador de cliente en el sitio TTN haciendo clic en "Agregar aplicación" en su consola de red personal. La clave de acceso a la aplicación se puede encontrar en la parte inferior después de haber creado una aplicación. Actúa como la contraseña para la conexión MQTT.
Aquí hay una descripción general de la terminología Lora:
| Lora | Explicación | ¿De donde? | ¿Dónde poner? |
|---|---|---|---|
| Deveui | Identificador de dispositivo final de 64 bits (único) | En la caja del dispositivo | Console TTN ("Dispositivo de registro") |
| Appeui o Joineui | Identificador de aplicación de 64 bits | Emitido por TTN ("Agregar aplicación") | Puesta en marcha.H |
| Nwkkey o appKey | Clave de cifrado de datos (servidor TTN <->) | Generado por TTN ("Agregar aplicación") | Puesta en marcha.H |
| Devaddr | Dirección de 32 bits (no unique) | Asignado cuando el nodo se une a TTN | - |
El método de activación siempre será sobre la activación del aire (OTAA). El archivo está preconfigurado para ejecutarse en Europa.
Llene el preprocesador define en node/Commissioning_template.h como se describe en la tabla. Luego cambie el nombre del archivo:
mv node/common/Commissioning_template.h node/common/Commissioning.h
Ejecute el script de compilación en root para construir tanto el servidor como el nodo binario.
./build_all.sh
Los parámetros disponibles para el script son:
clean : realizar una compilación limpiadebug : construir con símbolos de depuraciónEl flasheo de LSN50 se puede hacer con un cable FTDI UART simple usando el modo de arranque ISP.
Conecte el UART como se describe a continuación:
GND (black): JP4 Pin11 GND
TXD (orange): JP3 Pin9 PA3 (USART1)
RXD (yellow): JP3 Pin10 PA2 (USART1)
Descubra dónde está montado su dispositivo serial USB:
journalctl -k -n 100
Establezca el conmutador del modo flash al modo ISP y luego haga:
sudo stm32flash -w node/build/sensor-node.hex /dev/ttyUSBx
Conecte los sensores:
# DS18B20
GND (blue): JP3 Pin2 GND
DQ (yellow): JP3 Pin4 PA9 (Half-duplex single-wire using only TX)
VDD (red): JP3 Pin1 VDD
# Watermark 200SS (tbd)
JP3 Pin12 PA0
JP3 Pin5 PA4
# 10k resistor between PA4 and PA1
Más información sobre el sensor de marca de agua.
Consulte su cobertura local de TTN y asegúrese de que una puerta de enlace esté cerca. Inicio ./cosyfird --config-file /path/to/cosyfird.yaml y enciende el LSN50 con el interruptor de arranque configurado en flash. Después de unos momentos, deberías ver que llegan mensajes. En modo de depuración, los mensajes se envían cada 30 segundos. En modo de liberación cada media hora.
Ejemplo de carga útil de mensajes en hex:
| 42 | BE | EF | CA | FE |
^
Battery level
^
Temperature (resolution 0.0625 °C)
^
Soil water tension
(tbd)
Para el desarrollo, pueden ser necesarios los siguientes paquetes:
sudo apt install clang-format libmosquittopp-dev libssl-dev libyaml-cpp-dev libjsoncpp-dev libb64-dev libncurses-dev
Obtenga un depurador ST-Link V2 e instale estos paquetes:
sudo apt install stmlink-tools gdb-multiarch
Tres aplicaciones están disponibles después de la instalación:
Conecte como se describe a continuación:
GND: JP4 Pin11 GND
SWCLK: JP4 Pin4 PA14
SWDIO: JP4 Pin9 PA13
RST: JP4 Pin1 NRST
Establezca el interruptor de arranque en ISP e intente:
st-info --probe
Si todo se está ejecutando correctamente, debería ver la serie y otros Infos sobre el microcontrolador. En caso de que no vea los Infos, intente intercambiar SWDIO y SWCLK. Algunos depuradores ST-Link V2 están etiquetados erróneamente.
Puede flashear y depurar su código con:
st-util -p 1234
(gdb-multiarch) set arch arm
(gdb-multiarch) target extended-remote localhost:1234
(gdb-multiarch) load sensor-node
Para poder volver al código de usuario, configure el interruptor de arranque en Flash. Luego puede establecer puntos de interrupción y ejecutar el código como de costumbre:
(gdb-multiarch) break foo.c:42
(gdb-multiarch) run
Es posible cargar los símbolos sin parpadear:
(gdb-multiarch) file sensor-node
Para hacer un reinicio cálido, salta al comienzo del flash:
(gdb-multiarch) jump *0x08000000
Para poder ver el imprimo conectar un FTDI en los mismos pines que para flashear a través del modo de arranque de BootLoader/ISP y ejecutar:
screen /dev/ttyUSB3 38400