Vous êtes sur la page 1sur 31

IO

T
Expérience IOT
ER4 S4 apprentis
Jean-Louis.SALVAT@univ-cotedazur.fr
IO Module ER4 – 32 heures – 8 séances de 4h
T
1 séance ESP8266/envoie de données vers
Thingspeak (Wifi)
3 séances prise en main bananapi - Linux
4 séances programmation C et IOT - Linux
1 séance programmation C Linux avec gestion E/S
1 séance lecture I2C (BMP280) et temperature
processeur et envoie données vers ThingSpeak
1 séance Arduino avec NRF24L01+ et envoie données
vers gateway sur bananapi
1 séance : finalisation séance précédente, recuperation
de toutes les informations et envoie vers ThingSpeak

18/06/2019 Colloque GEII Longwy 1


IO Séance 1 : ESP8266 et ThingSpeak (1)
T ESP8266 (SOC)
MCU 160MHz 32 bits [2.5V;3.6V]
Flash > 512ko - RAM > 64ko
Wifi 802.11 b/g/n
Programmation en C (SDK Espressif)
Arduino
Lua

18/06/2019 Colloque GEII Longwy 2


IO Séance 1 : ESP8266 et ThingSpeak (2)
T ESP8266, VS code et platformio

18/06/2019 Colloque GEII Longwy 3


IO Séance 1 : ESP8266 et ThingSpeak (3)
T
void setup() {
Serial.begin(115200); // Initialize serial
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client); // Initialize ThingSpeak
}

void loop() {
if(WiFi.status() != WL_CONNECTED)
{ Serial.print("Attempting to connect to SSID:
"); Serial.println(SECRET_SSID);
while(WiFi.status() != WL_CONNECTED){
WiFi.begin(ssid, pass); // Connect to
WPA/WPA2 network. Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}

18/06/2019 Colloque GEII Longwy 4


IO Séance 1 : ESP8266 et ThingSpeak (4)
T // on associe les champs thingspeak au nombre generés
ThingSpeak.setField(1, number1);
ThingSpeak.setField(2, number2);

// write to the ThingSpeak channel


int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if(x == 200){
Serial.println("Channel update successful.");
}
else{
Serial.println("Problem updating channel. HTTP error code " +
String(x));
}

// change the
values number1++; //
compteur if(number1 >
99){
number1 = 0;
}
number2 =
random(0,100); Colloque GEII Longwy 5
}
18/ 06/2019 delay(20000);
IO Séance 1 : ESP8266 et ThingSpeak (5)
T Résultat sur https://thingspeak.com/

18/06/2019 Colloque GEII Longwy 6


IO Séance 2-4 : cible Linux, les solutions
T Raspberry Pi 3 B+ Orange Pi Zero Bananapi M2+

4 x Processeur Broadcom 4 x Processeur AllWinner 4 x Processeur AllWinner


BCM2837B0 Cortex-A53 H2+ 32-bit SoC 1,2 GHz H3 32-bit SoC 1,2 GHz +
64-bit SoC 1,4 GHz + GPU + GPU GPU
RAM : 1 Go SDRAM RAM : 512 Mo SDRAM RAM : 1 Go SDRAM
BLE Wifi Ethernet USB BLE Wifi Ethernet USB Flash MMC 8Go
Raspbian Armbian BLE Wifi Ethernet USB
Armbian

18/06/2019 Colloque GEII Longwy 7


IO Séance 2-4 : Bananapi connexion : Solution 1 et 2
T Solution 1 : connexion TeraTerm ou putty via un cable USB/micro

Le port com 17 a été


associé à votre connexion USB vers
la cible

Solution 2 : connexion TeraTerm ou putty via FTDI sur port Debug TX:RX Le port com 3 a été associé à
votre FTDI

18/06/2019 Colloque GEII Longwy 8


IO Séance 2-4 : Bananapi connexion: Solution 3 et 4
T
Solution 3 : connexion
putty sur ethernet en SSH

Routeur

sudo nmtui

Solution 4 :
connexion putty
en Wifi SSH
Box
ADSL ou fibre

18/06/2019 Colloque GEII Longwy 9


IO Séance 2-4 : Bananapi et Linux : copier des fichiers
T Monter une clé usb et copier des fichiers du PC
vers la cible
more /proc/partitions
sudo mount /dev/sda1 /media
sudo cp –r /media/rep_a_copier ~/nouveau_rep

Copier des fichers du PC vers la cible en


utilisant Winscp

Votre home
sur la cible

18/06/2019 Colloque GEII Longwy 10


IO Séance 2-4 : Bananapi et Linux : une interface graphique ?
T Il est possible de travailler avec une interface graphique à la place d’une connexion SSH. Dans
ce cas 2 solutions : utilizer un clavier,souris écran ou bien VNCViewer sur votre PC
sudo apt-get install xfwm4 xfce4-panel xfce4-settings xfce4-session xfce4-terminal xfdesktop4 xfce4-taskmanager tango-icon-theme
sudo apt-get install xfonts-base thunar mousepad lightdm lightdm-gtk-greeter tightvncserver

routeur

On utilise la souris, le clavier et l’écra n


Le bananapi est un « PC » Linux. Il
du poste de travail et on utilise
faut donc un clavier, une souris et un
VNCViewer sur le poste de travail
écran en plus du poste de travail
pour se connecter sur le bananapi

18/06/2019 Colloque GEII Longwy 11


IO Séance 2-4 : Bananapi et Linux : Programmation
T Résultat :
Utilisation de Geany ou Codeblocks

Utilisation du fichier Makefile


CC=gcc
all: main.c calc.c
${CC} -o test main.c calc.c
clean:
@echo "Cleaning up..."
Utilisation de gcc
rm *.o test

make all gcc main.c –o test


./test ./test

18/06/2019 Colloque GEII Longwy 12


IO Séance 2-4 : Bananapi et Linux -> le shell
T commandes
nano –c
explications
Editeur avec affichage du numéro de ligne
exemples
nano –c test.txt
pwd Path directory (Where we are) pwd
whereis Where is exécutable whereis armbian-config
ls ‐a shows all (including hidden fi les) ls –al
‐l displays long format
‐R gives a recursive listing ls -lt
‐r gives a reverse listing
‐t sorts last modifi ed
‐S sorts by file size
‐h gives human readable file sizes

cd Change directory cd ../../test


cd
cd / pour aller à la racine
cd .. pour remonter d’un cran
mkdir Make directory mkdir rep
rm Delete a file rm –r mon_rep/
‐r recursive delete (use for directories)
‐d remove empty directories
cp ‐r recursive copy cp test.txt test1.txt

Un ensemble de questions : l’étudiant répond aux questions en utilisant le site https://linuxjourney.com/

18/06/2019 Colloque GEII Longwy 13


IO Séance 5 : Programmation C Linux avec gestion E/S
T Extrait du datasheet du H3 Allwinner
3 solutions pour accéder aux GPIO sous Linux

Registres de
gestion des
ports
CPU-PORT

/sys/class/gpio /dev/gpiochip0 Adresse de base des Ports E/S


Solution 1 Solution 2

write() Ioctl()

/dev/mem
Solution 3
18/06/2019 Colloque GEII Longwy 14
IO Séance 5 : Programmation C Linux : solution 1 -> sysfs (1)
T
Utilisation du bash pour
lire et écrire sur les E/S

lecture
écriture
# echo 7 > /sys/class/gpio/export $ sudo sh
# cd /sys/class/gpio/gpio7 # echo 3 > /sys/class/gpio/export
/sys/class/gpio/gpio7# echo in > # echo out > /sys/class/gpio/gpio3/direction
direction # echo 1 > /sys/class/gpio/gpio3/value
/sys/class/gpio/gpio7# cat value # echo 0 > /sys/class/gpio/gpio3/value
0
/sys/class/gpio/gpio7# cat value
1
18/06/2019 Colloque GEII Longwy 15
IO Séance 5 : Programmation C Linux : Solution 1 -> sysfs (2)
T
Ecriture 1 sur PA10 , utilisation de sysfs, programmation C

FILE *f;
char file[128];
f = fopen("/sys/class/gpio/export", "w");
if(f==NULL) throw GPIOException("can't export GPIO pin .check access rights");
fprintf(f, "%d\n", 10);
fclose(f);
int fd;
fd = open(file, O_WRONLY);
sprintf(file, "/sys/class/gpio/gpio%d/direction", 10); // Set out direction
f = fopen(file,"w")); write(fd, "out", 3);
fprintf(f, "out\n"); // Set in direction
write(fd, "in", 2);
fclose(f);
close(fd);
sprintf(file, "/sys/class/gpio/gpio%d/value", 10);
// Set GPIO high status
f = fopen(file,"w"));
write(fd, "1", 1);
fprintf(f, "1\n");
fclose(f);
18/06/2019 Colloque GEII Longwy 16
IO Séance 5 : Programmation C Linux, solution 3 (principe)
T #include <stdio.h>
#include <unistd.h> Programmation directe dans les registres
#include <fcntl.h>
#include <sys/mman.h>
#define GPIO_BASE 0x01C20800
volatile unsigned int *PADR; C’est ce qui est fait dans la bibliothèque wiringPi
volatile unsigned int *PADDR;

int main (void) { https://github.com/zhaolei/WiringOP


unsigned char **gpio;
int fd;
fd = open("/dev/mem", O_RDWR);
if (fd < 0) { perror("Failed to open /dev/mem");
return fd;
}
*gpio = mmap (0, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_BASE);
PEDR = (unsigned int *)(*gpio + 0x20);
PEDDR = (unsigned int *)(*gpio + 0x24);
*PEDDR = 0xff; //set output
*PEDR = 0x02; // turn ON Red LED (port E1);
return 0;
}

18/06/2019 Colloque GEII Longwy 17


IO Séance 5 : Programmation C Linux – wiringPi (1)
T
Utilisation des executables de wiringPi dans le bash pour lire et écrire sur les E/S
Installation de wiringPi et compilation et installation des executables et bibliothèques
git clone https://github.com/zhaolei/WiringOP.git -b h3
cd WiringOP
chmod +x ./build
sudo ./build gpio readall

Exemples de commandes pour la broche 0

gpio mode 3 out écriture


gpio write 3 1
gpio mode 21 up
Choix du
gpio mode 21 down
mode
gpio mode 21 tri
gpio read 21
0 lecture

18/06/2019 Colloque GEII Longwy 18


IO Séance 5 : Programmation C Linux – wiringPi (2)
T #include <wiringPi.h>
Utilisation de la bibliothèque #include <stdio.h>
#include <stdlib.h>
wiringPi en C pour lire et écrire sur int main()
les E/S – Presque identique à la {
bibliothèque Arduino… int i;
if(wiringPiSetup()==-1){
printf("error"!\n");
}
for (i=1;i<=6;i+=1){
pinMode(i,OUTPUT);
}
while(1)
for (i=1;i<=6;i+=1){
digitalWrite(i,HIGH);
delay(100);
digitalWrite(i,LOW);
delay(100);
}

18/06/2019 Colloque GEII Longwy 19


IO Séance 6 : premiers pas avec l’I2C sous Linux via le bash
T
Test i2C avec le bash sur un PCF8574 et le paquet i2c-tools
Ajout du driver i2C-0 Détection esclave i2C
#sudo armbian-config

installer i2c-tools
#sudo apt install i2c-tools

18/06/2019 Colloque GEII Longwy 20


IO Séance 6 : premiers pas avec l’I2C sous Linux en C
T
Test i2C avec le PCF8574 et wiringPi en C
#include <wiringPiI2C.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
int i;
if(wiringPiI2CSetup(0x38)==-1){
printf("error"!\n");
}
while(1)
for (i=1;i<=6;i+=1)
{ wiringPiI2CWrite (fd,0);
delay(100);
wiringPiI2CWrite (fd,0xFF);
delay(100);
}

18/06/2019 Colloque GEII Longwy 21


IO Séance 6 : Envoie de données vers ThingSpeak en C
T
Comment écrire des données sur Thingspeak avec le format json
https://api.thingspeak.com/update.json?api_key=<write_api_key>&field1=123
{ "channel_id": 266256, "created_at": "2018-09-10T17:41:59Z", "entry_id": 2, "field1": "123", "field2": null, "field3": null, "field4": null, "field5": null, "field6": null,
"field7": null, "field8": null, "latitude": null, "longitude": null, "elevation": null, "status": null }

Comment écrire des données sur Thingspeak sans le format json


https://api.thingspeak.com/update?api_key=<write_api_key>&field1=123

Utilisation de libcurl pour générer les requêtes GET vers thingSpeak

http://raspberrypihobbyist.blogspot.com/2015/11/thingspeak-api-for-internet-of-things.html

18/06/2019 Colloque GEII Longwy 22


IO Séance 7 et 8 : nrf24L01+
T
Le nrf24L01+
250Kbps à 2Mbps
2.4GHz
1.9V – 3.6V
900nA low Power/ 11mA 0dBm
125 canaux de 1MHz
6 adresse par cannaux
SPI
Trame ACK (vérif
communication)

18/06/2019 Colloque GEII Longwy 23


IO Séance 7 et 8 : Présentation de la gateway + bananapi (1)
T
Solution 1 : gestion du Solution 2 : gestion du
nrf24L01+ via nrf24L01+ via le
l’arduino bananapi

FTDI (PROG)

TX/RX LEDs
nrf24L01+
LEDs
SPI
SPI
Promini arduino nrf24L01+

PUSH BUTTON
BMP180
PUSH I2C
BUTTON TX/RX BMP180 40 pins HEADER
I2C (bananapi)
40 pins HEADER
(bananapi)

18/06/2019 Colloque GEII Longwy 24


IO Séance 7 et 8 : Présentation de la gateway + bananapi (2)
T Schema électrique de la gateway : 2 solutions (avec Arduino ou avec bananapi)

18/06/2019 Colloque GEII Longwy 25


IO Séance 7 et 8 : le capteur , Arduino + nrf24L01+ (1)
T
Le capteur Arduino promini + nrf24L01+

18/06/2019 Colloque GEII Longwy 26


IO Séance 7 et 8 : le capteur , Arduino + nrf24L01+ (2)
T
Compilation programme de test sur l’Arduino (VS code + platformio)
https://www-soc.lip6.fr/trac/sesi-peri/wiki/SujetTP5-2017

18/06/2019 Colloque GEII Longwy 27


IO Séance 7 et 8 : bananapi + nrf24L01+ (1)
T
Avec armbian-config installation driver spi
https://www-soc.lip6.fr/trac/sesi-peri/wiki/SujetTP5-2017

Installation de la bibliothèque RF24


$ cd
$ mkdir nrf24l01
$ cd nrf24l01
$ git clone https://github.com/TMRh20/RF24.git
$ cd RF24
$ make
$ sudo make install

18/06/2019 Colloque GEII Longwy 28


IO Séance 7 et 8 : travail à faire
T
Le but de ce projet est de renvoyer l’information capteur venant de l’Arduino
nrf24L01+ mais aussi des informations venant de la gateway (BMP280) +
temperature processeur bananapi et de les renvoyer vers Thingspeak

https://thingspeak.com/

Arduino + nrf24L01+ Bananapi + gateway


nrf24L01+

18/06/2019 Colloque GEII Longwy 29


IO Synthèse et retour de ces 8 séances
T
Domotique, IOT, remontée information, bananapi ou autre : intérêt des étudiants
Tout à fait possible en projet
De nombreux apports techniques

32h : durée faible par rapport au projet


Plus le sujet est bien écrit et moins l’étudiant réfléchit
Pas de rapport demandé -> implication faible de l’étudiant

18/06/2019 Colloque GEII Longwy 30

Vous aimerez peut-être aussi