2. 01/11/2019 Colloque GEII Longwy 1
IOT
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
Module ER4 – 32 heures – 8 séances de 4h
6. 01/11/2019 Colloque GEII Longwy 5
IOT Séance 1 : ESP8266 et ThingSpeak (4)
// 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);
delay(20000); // Wait 20 seconds to update the channel again
}
7. 01/11/2019 Colloque GEII Longwy 6
IOT Séance 1 : ESP8266 et ThingSpeak (5)
Résultat sur https://thingspeak.com/
8. 01/11/2019 Colloque GEII Longwy 7
IOT Séance 2-4 : cible Linux, les solutions
Raspberry Pi 3 B+ Orange Pi Zero Bananapi M2+
4 x Processeur Broadcom
BCM2837B0 Cortex-A53
64-bit SoC 1,4 GHz + GPU
RAM : 1 Go SDRAM
BLE Wifi Ethernet USB
Raspbian
4 x Processeur AllWinner
H2+ 32-bit SoC 1,2 GHz +
GPU
RAM : 512 Mo SDRAM
BLE Wifi Ethernet USB
Armbian
4 x Processeur AllWinner
H3 32-bit SoC 1,2 GHz +
GPU
RAM : 1 Go SDRAM
Flash MMC 8Go
BLE Wifi Ethernet USB
Armbian
9. 01/11/2019 Colloque GEII Longwy 8
IOT Séance 2-4 : Bananapi connexion : Solution 1 et 2
Le port com 17 a été
associé à votre connexion USB vers
la cible
Le port com 3 a été associé à
votre FTDI
Solution 1 : connexion TeraTerm ou putty via un cable USB/micro
Solution 2 : connexion TeraTerm ou putty via FTDI sur port Debug TX:RX
10. 01/11/2019 Colloque GEII Longwy 9
IOT Séance 2-4 : Bananapi connexion: Solution 3 et 4
Routeur
sudo nmtui
Box
ADSL ou fibre
Solution 3 : connexion
putty sur ethernet en SSH
Solution 4 :
connexion putty
en Wifi SSH
11. 01/11/2019 Colloque GEII Longwy 10
IOT Séance 2-4 : Bananapi et Linux : copier des fichiers
Monter une clé usb et copier des fichiers du PC
vers la cible
sudo mount /dev/sda1 /media
sudo cp –r /media/rep_a_copier ~/nouveau_rep
more /proc/partitions
Copier des fichers du PC vers la cible en
utilisant Winscp
Votre home
sur la cible
12. 01/11/2019 Colloque GEII Longwy 11
IOT Séance 2-4 : Bananapi et Linux : une interface graphique ?
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
routeur
Le bananapi est un « PC » Linux. Il
faut donc un clavier, une souris et un
écran en plus du poste de travail
On utilise la souris, le clavier et l’écran
du poste de travail et on utilise
VNCViewer sur le poste de travail
pour se connecter sur le bananapi
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
13. 01/11/2019 Colloque GEII Longwy 12
IOT Séance 2-4 : Bananapi et Linux : Programmation
Utilisation du fichier Makefile
gcc main.c –o test
./test
CC=gcc
all: main.c calc.c
${CC} -o test main.c calc.c
clean:
@echo "Cleaning up..."
rm *.o test
Utilisation de gcc
Utilisation de Geany ou Codeblocks
make all
./test
Résultat :
14. 01/11/2019 Colloque GEII Longwy 13
IOT Séance 2-4 : Bananapi et Linux -> le shell
Un ensemble de questions : l’étudiant répond aux questions en utilisant le site
commandes explications exemples
nano –c Editeur avec affichage du numéro de ligne 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)
‐l displays long format
‐R gives a recursive listing
‐r gives a reverse listing
‐t sorts last modifi ed
‐S sorts by file size
‐h gives human readable file sizes
ls –al
ls -lt
cd Change directory
cd
cd / pour aller à la racine
cd .. pour remonter d’un cran
cd ../../test
mkdir Make directory mkdir rep
rm Delete a file
‐r recursive delete (use for directories)
‐d remove empty directories
rm –r mon_rep/
cp ‐r recursive copy cp test.txt test1.txt
https://linuxjourney.com/
15. 01/11/2019 Colloque GEII Longwy 14
IOT Séance 5 : Programmation C Linux avec gestion E/S
3 solutions pour accéder aux GPIO sous Linux
/dev/gpiochip0
Ioctl()write()
/sys/class/gpio
/dev/mem
Solution 1 Solution 2
Solution 3
Registres de
gestion des
ports
CPU-PORT
Extrait du datasheet du H3 Allwinner
Adresse de base des Ports E/S
16. 01/11/2019 Colloque GEII Longwy 15
IOT Séance 5 : Programmation C Linux : solution 1 -> sysfs (1)
$ sudo sh
# echo 3 > /sys/class/gpio/export
# echo out > /sys/class/gpio/gpio3/direction
# echo 1 > /sys/class/gpio/gpio3/value
# echo 0 > /sys/class/gpio/gpio3/value
# echo 7 > /sys/class/gpio/export
# cd /sys/class/gpio/gpio7
/sys/class/gpio/gpio7# echo in > direction
/sys/class/gpio/gpio7# cat value
0
/sys/class/gpio/gpio7# cat value
1
lecture
écriture
Utilisation du bash pour
lire et écrire sur les E/S
17. 01/11/2019 Colloque GEII Longwy 16
IOT Séance 5 : Programmation C Linux : Solution 1 -> sysfs (2)
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, "%dn", 10);
fclose(f);
sprintf(file, "/sys/class/gpio/gpio%d/direction", 10);
f = fopen(file,"w"));
fprintf(f, "outn");
fclose(f);
sprintf(file, "/sys/class/gpio/gpio%d/value", 10);
f = fopen(file,"w"));
fprintf(f, "1n");
fclose(f);
// Set out direction
write(fd, "out", 3);
// Set in direction
write(fd, "in", 2);
close(fd);
int fd;
fd = open(file, O_WRONLY);
// Set GPIO high status
write(fd, "1", 1);
18. 01/11/2019 Colloque GEII Longwy 17
IOT Séance 5 : Programmation C Linux, solution 3 (principe)
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#define GPIO_BASE 0x01C20800
volatile unsigned int *PADR;
volatile unsigned int *PADDR;
int main (void) {
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;
}
https://github.com/zhaolei/WiringOP
C’est ce qui est fait dans la bibliothèque wiringPi
Programmation directe dans les registres
19. 01/11/2019 Colloque GEII Longwy 18
IOT Séance 5 : Programmation C Linux – wiringPi (1)
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
Exemples de commandes pour la broche 0
git clone https://github.com/zhaolei/WiringOP.git -b h3
cd WiringOP
chmod +x ./build
sudo ./build
gpio mode 3 out
gpio write 3 1
gpio mode 21 up
gpio mode 21 down
gpio mode 21 tri
gpio read 21
0
gpio readall
lecture
Choix du
mode
écriture
20. 01/11/2019 Colloque GEII Longwy 19
IOT Séance 5 : Programmation C Linux – wiringPi (2)
Utilisation de la bibliothèque
wiringPi en C pour lire et écrire sur
les E/S – Presque identique à la
bibliothèque Arduino…
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
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);
}
21. 01/11/2019 Colloque GEII Longwy 20
IOT Séance 6 : premiers pas avec l’I2C sous Linux via le bash
Test i2C avec le bash sur un PCF8574 et le paquet i2c-tools
Ajout du driver i2C-0
#sudo armbian-config
installer i2c-tools
#sudo apt install i2c-tools
Détection esclave i2C
22. 01/11/2019 Colloque GEII Longwy 21
IOT Séance 6 : premiers pas avec l’I2C sous Linux en C
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);
}
23. 01/11/2019 Colloque GEII Longwy 22
IOT Séance 6 : Envoie de données vers ThingSpeak en C
Comment écrire des données sur Thingspeak avec le format json
http://raspberrypihobbyist.blogspot.com/2015/11/thingspeak-api-for-internet-of-things.html
https://api.thingspeak.com/update.json?api_key=<write_api_key>&field1=123
Utilisation de libcurl pour générer les requêtes GET vers thingSpeak
Comment écrire des données sur Thingspeak sans le format json
https://api.thingspeak.com/update?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 }
24. 01/11/2019 Colloque GEII Longwy 23
IOT Séance 7 et 8 : nrf24L01+
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)
25. 01/11/2019 Colloque GEII Longwy 24
IOT Séance 7 et 8 : Présentation de la gateway + bananapi (1)
Solution 1 : gestion du
nrf24L01+ via
l’arduino
Promini arduino nrf24L01+
SPI
PUSH BUTTON
LEDs
FTDI (PROG)
40 pins HEADER
(bananapi)
TX/RX
TX/RX BMP180
I2C
nrf24L01+
SPI
PUSH BUTTON
LEDs
40 pins HEADER
(bananapi)
BMP180
I2C
Solution 2 : gestion du
nrf24L01+ via le
bananapi
26. 01/11/2019 Colloque GEII Longwy 25
IOT Séance 7 et 8 : Présentation de la gateway + bananapi (2)
Schema électrique de la gateway : 2 solutions (avec Arduino ou avec bananapi)
27. 01/11/2019 Colloque GEII Longwy 26
IOT Séance 7 et 8 : le capteur , Arduino + nrf24L01+ (1)
Le capteur Arduino promini + nrf24L01+
28. 01/11/2019 Colloque GEII Longwy 27
IOT Séance 7 et 8 : le capteur , Arduino + nrf24L01+ (2)
Compilation programme de test sur l’Arduino (VS code + platformio)
https://www-soc.lip6.fr/trac/sesi-peri/wiki/SujetTP5-2017
29. 01/11/2019 Colloque GEII Longwy 28
IOT Séance 7 et 8 : bananapi + nrf24L01+ (1)
Avec armbian-config installation driver spi
https://www-soc.lip6.fr/trac/sesi-peri/wiki/SujetTP5-2017
$ cd
$ mkdir nrf24l01
$ cd nrf24l01
$ git clone https://github.com/TMRh20/RF24.git
$ cd RF24
$ make
$ sudo make install
Installation de la bibliothèque RF24
30. 01/11/2019 Colloque GEII Longwy 29
IOT Séance 7 et 8 : travail à faire
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
Bananapi + gateway
nrf24L01+
Arduino + nrf24L01+
https://thingspeak.com/
31. 01/11/2019 Colloque GEII Longwy 30
IOT Synthèse et retour de ces 8 séances
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
Domotique, IOT, remontée information, bananapi ou autre : intérêt des étudiants
Tout à fait possible en projet
De nombreux apports techniques