étape 6 - Envoi des valeurs de la température sur TTN par le protocole LoraWan
Notre but est d'envoyer une trame contenant la température sur le serveur TTN, ceci afin de pouvoir l'observer sur la console TTN
Il vous faut ouvrir le fichier 'mainBMP280.py'). Ce programme, après connexion à TTN envoie à intervalle régulier la partie entière et le dixième de la température (deux entiers)
# LoPy4 - COMMUNICATION LORA########## Importation des bibliothèques nécessaires #######from network import LoRa
import socket
import time
import ubinascii
from bmp280 import *
from machine import I2C, Pin # create an I2C bus object accordingly to the port you are using
#################### Déclarations BMP280 ###################bus = I2C(1, baudrate=100000) # on pyboard
BMP = BMP280(bus)
BMP.oversample_sett = 2
BMP.baseline = 101325
#################### Reglages LoraWan ####################### Europe = LoRa.EU868lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.EU868)
# create an OTAA authentication parameters, change them to the provided credentialsapp_eui = ubinascii.unhexlify('0000000000000000')
app_key = ubinascii.unhexlify('96D12C7E476FC33A1AF462C6DA05ED58')
dev_eui = ubinascii.unhexlify('70B3D57ED0048738')
# join a network using OTAA (Over the Air Activation)lora.join(activation=LoRa.OTAA, auth=(dev_eui, app_eui, app_key), timeout=0,dr=5)
# wait until the module has joined the networkwhile not lora.has_joined():
time.sleep(2.5)
print('Not yet joined...')
print('Joined')
# create a LoRa sockets = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
# set the LoRaWAN data rates.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)
# make the socket blocking# (waits for the data to be sent and for the 2 receive windows to expire)s.setblocking(True)
################## Fin réglages LoraWan ################################### Programme principal ##################while True:
temp = BMP.temperature
p = BMP.pressure
print("Temperature: ",temp)
print("Pressure: ",p)
#time.sleep(30) # Break of 300sec before the next run of your programs.send(bytes([int(temp//1),int((temp%1)*10)])) # Send the data en numérique (unités et diziéme)
time.sleep(30) # Break of 300sec before the next run of your program
#pycom.heartbeat(False)Comprendre le programme
Le programme comporte :
une partie import des bibliothèques nécessaires (carte LoPy, capteur BMP, protocole LoRaWAN)
une partie initialisation et établissement de la communication LoRaWAN
une boucle principale de mesure et d'envoi des données
Réglages LoRaWAN (lignes 17 à 38)
Quelques explications :
LoRa désigne le mode de transmission radio, support de l'échange ; LoRaWAN désigne le protocole d'échange sur le réseau LoRa.
1. Préparation de la connexion et connexion.
Les lignes 17 à 38 permettent la connexion au réseau LoRaWAN :
A la ligne 19, on spécifie les 2 paramètres de la connexion LoRa : le mode (LoRaWAN), et la région du monde avec la fréquence autorisée (868MHz pour l'Europe).
Les lignes 21 à 23 permettent l'identification, la méthode utilisée pour se connecter au réseau s'appelle la méthode OTAA (Over The Air Activation). Le device va envoyer les identifiants et clé d'accès qui nous ont été données par The Things Network :
l'identifiant unique d'application (application Extended Unique Identifier,
app_eui)l'identifiant unique d'application (application Extended Unique Identifier,
app_eui
l'identifiant unique du device (device Extended Unique Identifier,
dev_eui)
A la ligne 25, on définit le mode d'authentification et un taux de donnée, le data rate (DR), qui est un numéro qui désigne une série de paramètres par défaut.
Ici, on utilise le n°5, qui correspond, pour information, à un facteur d'étalement de 7, une bande passante de 125 kHz (rappelez-vous la forme particulière des émissions LoRa sous forme de sifflets de fréquences montantes) et un débit de 5470 bit/s.
2. Connexion
Ligne 25 : c'est ici que se fait la demande d'accès au réseau LoRa !
on se connecte à TTN en définissant le mode d'authentification et un taux de donnée, le data rate (DR), qui est un numéro qui désigne une série de paramètres par défaut.
Ici, on utilise le n°5, qui correspond, pour information, à un facteur d'étalement de 7, une bande passante de 125 kHz (rappelez-vous la forme particulière des émissions LoRa sous forme de sifflets de fréquences montantes) et un débit de 5470 bit/s.
s'en suit une phase d'attente (jusqu'à ligne 30)
...
Une fois la connexion établie, pour pouvoir émettre, comme pour d'autres protocoles réseaux, on crée un socket (litt., une prise) LoRa ; les émissions de données du capteur se feront sur ce socket, que l'on nomme "s".
3. Boucle principale (lignes 42 à 50)
Le programme principal est une boucle infinie de :
lecture du capteur BMP280 (comme dans notre programme de test du capteur)
écriture de la température et de la pression sur la console de programmation (pour debug)
envoi sous forme numérique de la donnée température (octet partie entière + octet partie décimale)
attente de 1 minute (exigée par le protocole LoRaWAN pour permettre le partage de la bande par d'autres objets communicants)
notez à la ligne 49 que l'émission (send) se fait sur le socket "s" défini plus haut : s.send(....)
Tester l'envoi des données sur TTN
1. Transfert du programme sur la carte LoPy et test de la communication LoRa vers TTN
Modifiez le programme pour y placer les valeurs d'authentification de votre 'Iot'
Lancez votre programme
Après connexion à TTN, vérifiez que le "payLoad" correspond bien à la température de la salle.
2. Test du programme :
Aller sur le site de TTN, puis dans votre Application ou votre Device, sélectionner Data
Vous devriez voir arriver toutes les minutes un 'payload' semblable à celui-ci contenant la valeur de la température :
Complément :
A faire
Capturez la fenêtre de votre console TTN ; relevez de même le payload reçu et notez la température envoyée par le capteur (console de VSC) ; vérifiez que les deux informations sont cohérentes.
Notez toutes informations dans le compte-rendu.
Dans quel système de numération est présenté le payload dans la console TTN ?
Dans quel format est envoyée l'information de température (ligne 49 du programme) ?
