é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)

1
# LoPy4 - COMMUNICATION LORA
2
3
########## Importation des bibliothèques nécessaires #######
4
from network import LoRa
5
import socket
6
import time
7
import ubinascii
8
from bmp280 import *
9
from machine import I2C, Pin            # create an I2C bus object accordingly to the port you are using
10
11
#################### Déclarations BMP280 ###################
12
bus = I2C(1, baudrate=100000)           # on pyboard
13
BMP = BMP280(bus)
14
BMP.oversample_sett = 2
15
BMP.baseline = 101325
16
17
#################### Reglages LoraWan ######################
18
# Europe = LoRa.EU868
19
lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.EU868)
20
# create an OTAA authentication parameters, change them to the provided credentials
21
app_eui = ubinascii.unhexlify('0000000000000000')
22
app_key = ubinascii.unhexlify('96D12C7E476FC33A1AF462C6DA05ED58')
23
dev_eui = ubinascii.unhexlify('70B3D57ED0048738')
24
# join a network using OTAA (Over the Air Activation)
25
lora.join(activation=LoRa.OTAA, auth=(dev_eui, app_eui, app_key), timeout=0,dr=5)
26
# wait until the module has joined the network
27
while not lora.has_joined():
28
    time.sleep(2.5)
29
    print('Not yet joined...')
30
print('Joined')
31
# create a LoRa socket
32
s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
33
# set the LoRaWAN data rate
34
s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)
35
# make the socket blocking
36
# (waits for the data to be sent and for the 2 receive windows to expire)
37
s.setblocking(True)
38
################## Fin réglages LoraWan #################
39
40
41
################## Programme principal ##################
42
while True:
43
        temp = BMP.temperature
44
        p = BMP.pressure
45
        print("Temperature: ",temp)
46
        print("Pressure: ",p)
47
48
        #time.sleep(30) # Break of 300sec before the next run of your program
49
        s.send(bytes([int(temp//1),int((temp%1)*10)]))             # Send the data en numérique (unités et diziéme)
50
        time.sleep(30) # Break of 300sec before the next run of your program
51
#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

  1. Modifiez le programme pour y placer les valeurs d'authentification de votre 'Iot'

  2. Lancez votre programme

  3. Après connexion à TTN, vérifiez que le "payLoad" correspond bien à la température de la salle.

2. Test du programme :

  1. 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) ?