MODULES DE BASE - HELLO WORD - DOMAINE DU COURS MODULE IOC - MU4IN109 - 2021 FRANCK WAJSBÜRT - FRANÇOIS PÉCHEUX - SOC
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Modules de base — hello word Module IOC — MU4IN109 — 2021 Franck Wajsbürt - François Pécheux 1 Domaine du cours 2
Plateforme cible Hello world 12:54 arduino NRF24 GPIO WIFI lumière WEB ESP32 son WEB SPI mouvement Browser NRF24 WIFI Server présence ethernet ethernet BLE température ESP32 led BLE biper Routeur web Routeur Cours abordés ● Systèmes embarqués ● protocole filaire ● protocole radio ● Pilotes Linux ● server web ● Base de données ● Publish & Subscribe 3 Plan ● Informations sur les unités de calculs utilisées ● Périphériques passifs avec un peu d'électroniques ● Conversion Analogique ↔ Numérique ● Raspberry PI Accès aux GPIO 4
Unités de calculs 5 Nanocomputers ● Le modèle des réseaux de capteurs est constitués de nanocomputers interconnectés en filaire ou par radio. ● Un nanocomputer est un ordinateur complet construit autour d'un SoC (System-On-Chip) de la taille d'une carte de crédit ou ticket de métro ○ processeur(s) ○ ram + rom (flash) ○ nombreux contrôleurs d'entrées-sorties ○ périphériques d'entrées-sorties basiques (BP, LED, écran, HP) ○ connecteurs ○ chargeur de batterie ○ etc…. ● Exemples utilisés en TP ○ Raspberry PI 1 et 3, ○ TTGO LoRa 32 ○ Arduino nano, 6
Que contient un SoC ? Un SoC ou System-On-Chip rassemble au moins 1 cœur de calcul des contrôleurs de périphériques et de la mémoire. (un MCU pour Micro Controler Unit est un petit SoC) cœur ROM copro debug de RAM (flash) Crypto prog calcul I2C watchdog SPI conv. réveil PWM GPIO horloge UART, analog. WIFI Peu de composants autour sont nécessaires pour réaliser un nanocomputer 7 les SoC contiennent beaucoup de choses ! Les documentations font des centaines de pages mais la plupart des fonctionnalités sont abstraites par des drivers ou des API spécifiques. Nous allons utiliser le C / C++ avec Linux et Arduino Atmega328p BCM2835 XTENSA LX6 (Arduino) (Raspberry-Pi 1) (ESP32) 8
Raspberry Pi ● Université de Cambridge ● Basé sur des SoC Broadcom / ARM ● Supporte OS généralistes : Linux, Windows IOT, Android, RiscOS ● Raspberry Pi 1 est sortie en février 2012, la Rpi4 en 2019 ● Modèles utilisés en TP : ● Raspberry Pi 1B (2012) ● Raspberry Pi 3 (2016) ■ BCM2835 (1 core) + GPU ■ BCM2837 (4 cores) + GPU ■ ARM V6 32 bits ■ ARM V8 64 bits ■ 700 MHz ■ 1200 MHz ■ 256 MB ■ 1024 MB ■ SDcard ■ SDcard ■ 2 USB ■ 4 USB ■ ethernet 10/100 MHz ■ ethernet 10/100 MHz, ■ HDMI FullHD + son ■ HDMI FullHD + son ■ 8 GPIO ■ 17 GPIO ■ I2C, 2 SPI, UART, PWM ■ I2C, 2 SPI, UART, PWM ■ 200mA (alim 1 A) ■ 800mA (alim 2.5 A) ■ WIFI 802.11ac, Bluetooth 4.1 9 Arduino ● Interaction Design Institute Ivrea (Italie) ● Intègre initialement des SoC (System On Chip) Atmel 8 bits mais aussi des 32 bits : ARM Cortex-M0/M3 et Intel Quark x86 ● Basé sur le projet Wiring 2003 (Hernando Barragán) ● Exécutif spécifique (Inspiré de Processing MIT 2001 pour Graphiste) ● Projet Open Source pour le code et le matériel ⇒ beaucoup de clones ● Arduino Uno (2005) ■ Atmega328p ■ 5V ■ core 8 bits ■ 16 MHz ■ Flash 32 kB + EEPROM 1 kB + SRam 2 kB ■ 14 GPIO dont 6 PWM ■ I2C, SPI, UART, ■ 8 Entrées Analogiques 10 bits ■ 20 mA + 40 mA par I/O ■ LED + 1 bouton reset 10
ESP32 ● Espressif Systems (Shanghai) ● nanocomputers pour réseaux de capteur radio ● Intègre des SoC Xtensa dual-core (or single-core) 32-bit LX6 (2016) ● Version précédente : ESP8266 (2014) ● Plusieurs Exécutifs spécifiques SDK en C++, LUA, Python, C, Go ● Supporte Arduino et aussi Free RTOS ● Module TTGO-Lora32-Oled (Wemos) ■ XTENSA LX6 ■ 3.3V ■ dual-core 32 bits ■ 240 MHz ■ Flash 32 MB ■ SRam 512 kB ■ 28 GPIO (multi-fonctions) ■ I2C, SPI, UART, 18 Entrées Analogiques (12 bits) ■ 50 mA ■ LED + 1 bouton reset ■ WIFI 802.11 bgn, Bluetooth 4.2, ■ LoRa 868 MHz (SX1276) 11 Périphériques 12
Que connecte-on à un nanocomputer ? Les périphériques qui vont permettre de se connecter à l'environnement. Entrées capteurs Sorties actionneurs debug GPIO lumière, micro, hygromètre, moteurs CC ou PàP, prog mouvement, détecteur de copro PWM relais, HP, leds, …. gaz, proximité, torsion, Crypto pression, thermomètre, conv. accéléromètre, GPS, ... RAM analog. IHM I2C ROM SPI (flash) UART WIFI IHM clavier, télécommande, surface tactile, voix, ... cœur de calcul watchdog réveil horloge écran LCD, buzzer, voix, ... ● Il existe une très grande variété de capteurs et d'actionneurs mais le nombre d'interface est plus réduit en passant par des protocoles de communication standard : rs232, CAN, I2C, SPI, USB, WIFI, BLE, LoRa ● Les capteurs et actionneurs contiennent souvent des µC pour simplifier le travail de l'application ou réduire la quantité d'informations à échanger. 13 2 types de périphériques ● Périphériques passifs Lecture / écriture directe d'une grandeur électrique numérique [0, 1] ou analogique (OV à 3.3V) ● Périphériques actifs Un contrôleur de périphérique offrant une abstraction sous forme de registres de contrôle accessibles par un protocole de communication avec ou sans fils. En général, ces périphériques intègrent ... un micro-contrôleur... 14
Périphériques passifs basiques résistances ● bouton poussoir ● potentiomètre ● thermistance, photorésistance ● LED ● interrupteur commandé (relais) ● moteur(s) 15 Résistance et capacité V Résistance R1 R1 R2 R1*R2 loi d'Ohm R1+R2 R1 R2 R1+R2 R1+R2 U=RI R2 R2 Capacité charge d'une capacité U Q = CU I = C dU/dt U composition - parallèle C = Σ Ci - série C = Σ 1 / Ci 16
Entrées-Sorties basiques VR VL ● Allumer une LED ○ Il faut que D13 soit programmé en sortie (5V) ○ loi d'Ohm : U = RI (ou R = U/I) ○ La tension aux bornes d'une LED allumée est ~ 1.8V mA led point de fonctionnement si VL = 1.8V ⇒ I = 20mA 20 ⇒ VR = 5-1.8 = 3.2V I = (5-VL) / R R 160 Ohms ⇒ R = 3.2/20 = 160 I = led(VL) VL 5 ● lire un bouton poussoir ○ Lorsque l'interrupteur est ouvert D2 est à 5V ○ Lorsqu'il se ferme la capacité se décharge à 66% en RC secondes (résitance*capacité=temps) ○ en R1*C1 = 104 * 10-7 = 10-3 = 1 ms (66%) C1 100nF http://eskimon.fr/ est une aide précieuse 17 Traitement des rebonds Il suffit d'échantillonner à une période supérieure aux rebonds, mais inférieure à la durée d'appui soit ● B : une variable ● E : la valeur du bouton poussoir ● appui : un drapeau à 1 si appui ● relache : un drapeau à 1 si relachement faire périodiquement V B = (B
Conversion Analogique 19 Place de l'analogique ANALOG ADC MULTIPLEX PWM MEM NUMERIC CPU IN NUMERIC OUT 20
Convertisseur Analogique Numérique 1/2 Signal analogique 1 fil CAN Signal numérique N bits La conversion impose une quantification qui va dépendre du nombre de bits du signal numérique 8, 10, ou 12 bits Recherche par dichotomie out = 1 si Vin > Vr 0 si Vin
Conversion Numérique Analogique PWM Sans Convertisseur Numérique Analogique, on peut produire un signal modulé en largeur d'impulsion : PWM La valeur moyenne du signal est proportionnel à la largeur d'impulsion C'est ce propose l'Arduino. http://www.mon-club-elec.fr/pmwiki_reference_arduino/ pmwiki.php?n=Main.AnalogWrite 23 Présentation RaspberryPi 24
Raspberry Pi 1B 26 pins BMC2835 25 GPIO de la Raspberry Pi Le BCM2835 à 54 GPIO mais seulement 17 sont accessibles La carte Raspberry Pi3 en propose 26 26
GPIO schéma électrique 27 Périphériques de base : GPIO 150 28
GPIO Memory Mapping 29 Mapping des GPIO dans l'espace utilisateur adresses physiques Espace d'adresses physiques des GPIO Traduction d'adresses par la MMU Espace d'adresses virtuelles adresses virtuelles des GPIO pour l'application Le mapping est réalisé par un appel au système 30
GPIO Registres de configuration 41 registres permettent de définir les fonctions et les comportement des GPIO 31 90 Configuration des broches GPIO FSELn (3 bits) : 000 pour input 001 pour output 32
GPIO functions Chaque broche peut être liée à des fonctions alternatives ● attention toutes ne sont pas accessibles sur la RaspberryPi ● code couleur facilite la lecture ○ Orange / Fuschia I2C ○ Bleu moyen PWM ○ Rouge RS232 ○ Marron SPI ○ ... 33 Ecrire une valeur sur une broche Deux bits par broche : SET & CLEAR 4 registres 32 bits puisqu'il y a 54 GPIOs adresse BUS 34
Lire la valeur d'une broche 1 seul bit par broche qui recopie sa valeur 35 Exemple avec les GPIO 1/4 ● L'objectif est d'accéder aux GPIO en utilisant le mapping des registres de contrôle dans l'espace virtuel de l'application. ● On doit pouvoir ○ permettre l'accès aux registres par mmap ○ lire et écrire dans les registres 36
Exemple avec les GPIO 2/4 ● accès aux registres void * gpio_base; if ( gpio_base == MAP_FAILED ) { close ( mmap_fd ); mmap_fd = open( "/dev/mem", return -1; O_RDWR | O_SYNC ); } if ( mmap_fd < 0 ) { return -1; } gpio_base = mmap ( NULL, RPI_BLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, // pas de copy-on-write mmap_fd, BCM2835_GPIO_BASE ); 37 Exemple avec les GPIO 3/4 ● Ecriture dans les registres de configurations des GPIO *( gpio_base + 0x0 ) = ( *( gpio_base + 0x0 ) & ~( 0x7
Exemple avec les GPIO 4/4 ● Pour lire l'état d'une broche uint32_t reg_value = ( *( gpio_base + ( 0x34 / 4 ) ) >> 2 ) & 0x1; adresse du registre à partir de la base 39 En TME ● Compilation et cross-compilation sur Raspberry Pi 1B ○ Hello World ○ Commande de LED et lecture d'un Bouton Poussoir depuis une application utilisateur ○ Commande d'un afficheur LCD en mode utilisateur 40
Vous pouvez aussi lire