ESP8266 tutoriel Arduino
ESP8266 tutoriel Arduino
...
…
CHAPITRE 2 Référence
E / S numérique
Les numéros de broche dans Arduino correspondent directement aux numéros de broche GPIO de l’ESP8266. Les fonctions pinMode, digitalRead et digitalWrite fonctionnent normalement. Pour lire GPIO2, appelez digitalRead (2). Les broches numériques 0 à 15 peuvent être INPUT, OUTPUT ou INPUT_PULLUP. La broche 16 peut être INPUT, OUTPUT ou INPUT_PULLDOWN_16. Au démarrage, les broches sont configurées comme INPUT. Les broches peuvent également servir à d'autres fonctions, telles que Série, I2C, SPI. Ces fonctions sont normalement activées par la bibliothèque correspondante. Le diagramme ci-dessous illustre le mappage des broches du module ESP-12, très prisé.
Les broches numériques 6 à 11 ne figurent pas sur ce schéma car elles permettent de connecter une puce de mémoire flash sur la plupart des modules. Si vous essayez d'utiliser ces broches en tant qu'IO, le programme se bloquera probablement. Notez que certaines cartes et modules (ESP-12ED, NodeMCU 1.0) cassent également les broches 9 et 11. Celles-ci peuvent être utilisées comme entrée / sortie si la puce flash fonctionne en mode DIO (par opposition à QIO, qui est la valeur par défaut). Les interruptions des broches sont prises en charge par les fonctions attachInterrupt, detachInterrupt. Les interruptions peuvent être attachées à n’importe quelle broche GPIO, à l’exception de GPIO16. Les types d'interruption Arduino standard sont pris en charge: CHANGE, RISING, FALLING.
Entrée analogique
L'ESP8266 dispose d'un seul canal ADC disponible pour les utilisateurs. Il peut être utilisé pour lire la tension sur la broche ADC ou pour lire la tension d'alimentation du module (VCC).
Pour lire la tension externe appliquée à la broche ADC, utilisez analogRead (A0). La plage de tension d'entrée est comprise entre 0 et 1,0V.
Pour lire la tension VCC, utilisez ESP.getVcc () et la broche ADC doit être maintenue non connectée. De plus, la ligne suivante doit être ajoutée à l'esquisse:
ADC_MODE (ADC_VCC);
Cette ligne doit apparaître en dehors de toute fonction, par exemple juste après les lignes #include de votre esquisse.
Sortie analogique
analogWrite (pin, value) active le logiciel PWM sur la broche donnée. PWM peut être utilisé sur les broches 0 à 16. Appelez analogWrite (pin, 0) pour désactiver PWM sur la broche. la valeur peut être comprise entre 0 et PWMRANGE, ce qui correspond à 1023 par défaut. La plage PWM peut être modifiée en appelant analogWriteRange (new_range).
La fréquence PWM est de 1 kHz par défaut. Appelez analogWriteFreq (new_frequency) pour modifier la fréquence.
Timing et délais
millis () et micros () renvoient respectivement le nombre de millisecondes et de microsecondes écoulées après la réinitialisation. delay (ms) met l'esquisse en pause pendant un nombre de millisecondes donné et permet l'exécution de tâches WiFi et TCP / IP.
delayMicroseconds (us) s'interrompt pour un nombre donné de microsecondes.
N'oubliez pas qu'il y a beaucoup de code qui doit être exécuté sur la puce en plus du croquis lorsque le WiFi est connecté. Les bibliothèques WiFi et TCP / IP ont la possibilité de gérer les événements en attente chaque fois que la fonction loop () se termine, ou lorsqu'un délai est appelé. Si vous avez une boucle dans votre esquisse qui prend beaucoup de temps (> 50 ms) sans délai d'appel, vous pouvez envisager d'ajouter une fonction call to delay pour que la pile WiFi continue de fonctionner correctement.
Il existe également une fonction yield () qui équivaut à delay (0). La fonction delayMicroseconds, en revanche, ne cède pas le rôle à d'autres tâches. Son utilisation pour des retards supérieurs à 20 millisecondes n'est donc pas recommandée.
En série
L'objet série fonctionne à peu près de la même manière que sur un Arduino normal. Outre la FIFO matérielle (128 octets pour TX et RX), HardwareSerial dispose de tampons TX et RX supplémentaires de 256 octets. La transmission et la réception sont toutes deux déclenchées par des interruptions. Les fonctions d'écriture et de lecture ne bloquent l'exécution de l'esquisse que lorsque les mémoires tampons / FIFO respectives sont pleines / vides.
Série utilise UART0, qui est mappé sur les broches GPIO1 (TX) et GPIO3 (RX). Le numéro de série peut être remappé sur GPIO15 (TX) et GPIO13 (RX) en appelant Serial.swap () après Serial.begin. En rappelant swap, l'UART0 est redirigé vers GPIO1 et GPIO3.
Serial1 utilise UART1, la broche TX est GPIO2. UART1 ne peut pas être utilisé pour recevoir des données car normalement, la broche RX est occupée pour la connexion par puce flash. Pour utiliser Serial1, appelez Serial1.begin (baudrate). Si Serial1 n'est pas utilisé et si Serial n'est pas échangé, TX pour UART0 peut être mappé sur GPIO2 en appelant Serial.set_tx (2) après Serial.begin ou directement avec Serial.begin (baud, config, mode, 2). Par défaut, la sortie de diagnostic des bibliothèques WiFi est désactivée lorsque vous appelez Serial.begin. Pour réactiver la sortie de débogage, appelez Serial.setDebugOutput (true). Pour rediriger la sortie de débogage vers Serial1, appelez Serial1.setDebugOutput (true). Vous devez également utiliser Serial.setDebugOutput (true) pour activer la sortie depuis la fonction printf (). Les objets Serial et Serial1 prennent en charge 5, 6, 7, 8 bits de données, la parité impaire (O), paire (E) et non (N) et 1 ou 2 bits d'arrêt. Pour définir le mode souhaité, appelez Serial.begin (baudrate, SERIAL_8N1), Serial. commencer (vitesse de transmission, SERIAL_6E2), etc.
Une nouvelle méthode a été mise en œuvre sur Serial et Serial1 pour obtenir le réglage actuel du débit en bauds. Pour obtenir le débit en bauds actuel, appelez Serial.baudRate (), Serial1.baudRate (). Retourne un int de vitesse actuelle. Par exemple
// Définir le débit en bauds à 57600
Serial.begin (57600);
// Obtenir le débit en bauds actuel
intbr = Serial.baudRate ();
// Imprimera "Le numéro de série est de 57600 bps"
Serial.printf ("La série est% d bps", br);
Je l’ai également fait pour la bibliothèque officielle du logiciel ESP8266, voir cette demande d’affichage. Notez que cette implémentation concerne uniquement les cartes basées sur ESP8266 et ne fonctionnera pas avec les autres cartes Arduino.
Progmem
Les fonctions de la mémoire programme fonctionnent à peu près de la même manière que sur un Arduino normal; placer des données et des chaînes en lecture seule dans la mémoire en lecture seule et libérer du tas pour votre application. La différence importante est que sur l'ESP8266, les chaînes littérales ne sont pas mises en commun. Cela signifie que la même chaîne littérale définie dans un F ("") et / ou un PSTR ("") occupera de la place pour chaque instance du code. Vous devrez donc gérer vous-même les doublons.
Il existe une macro auxiliaire supplémentaire facilitant le passage de chaînes const PROGMEM aux méthodes utilisant un __FlashStringHelper appelé FPSTR (). L'utilisation de cela facilitera la mise en commun des chaînes. Ne pas regrouper les cordes ...
String response1;
response1 + = F ("http:");
...
Réponse de chaîne2;
response2 + = F ("http:");
utiliser FPSTR deviendrait ...
const char HTTP [] PROGMEM = "http:";
...
{
String response1;
response1 + = FPSTR (HTTP);
...
Réponse de chaîne2;
response2 + = FPSTR (HTTP);
}
CHAPITRE 3 Bibliothèques
WiFi (bibliothèque ESP8266WiFi)
La bibliothèque ESP8266WiFi a été développée sur la base du SDK ESP8266, en utilisant la convention de dénomination et la philosophie de fonctionnalité globale de la bibliothèque Arduino WiFi Shield. Au fil du temps, les fonctionnalités Wi-Fi riches transférées du SDK ESP8266 à cette bibliothèque ont dépassé les API de la bibliothèque WiFi Shield et il est devenu évident que nous devions fournir une documentation séparée sur les nouveautés et les extras. Documentation de la bibliothèque ESP8266WiFi
Téléscripteur
Bibliothèque pour appeler des fonctions à plusieurs reprises avec une certaine période. Deux exemples inclus. Il n'est actuellement pas recommandé de bloquer les opérations d'E / S (réseau, série, fichier) à partir des fonctions de rappel du Ticker. Au lieu de cela, définissez un indicateur dans le rappel du téléscripteur et recherchez-le dans la fonction de boucle. Voici une bibliothèque pour simplifier l'utilisation du ticker et éviter la réinitialisation de WDT: TickerScheduler
EEPROM
C'est un peu différent de la classe EEPROM standard. Vous devez appeler EEPROM.begin (taille) avant de commencer à lire ou à écrire, taille étant le nombre d'octets que vous souhaitez utiliser. La taille peut être comprise entre 4 et 4096 octets. EEPROM.write n'écrit pas immédiatement dans Flash, vous devez appeler EEPROM.commit () chaque fois que vous souhaitez enregistrer les modifications. EEPROM.end () s'engage également et publie la copie RAM du contenu de l'EEPROM. La bibliothèque EEPROM utilise un secteur de mémoire flash situé juste après le SPIFFS. Trois exemples inclus.
I2C (bibliothèque de fils)
La librairie Wire prend actuellement en charge le mode maître jusqu’à environ 450 KHz. Avant d’utiliser I2C, les broches pour SDA et SCL doivent être définies en appelant Wire.begin (int sda, int scl), c’est-à-dire Wire.begin (0, 2) sur ESP-01. Sinon, elles utilisent par défaut les broches 4 (SDA) et 5 (SCL).
SPI
La bibliothèque SPI prend en charge l’ensemble de l’API Arduino SPI, y compris les transactions, y compris la phase de paramétrage (CPHA). Réglage du
La polarité de l'horloge (CPOL) n'est pas encore prise en charge (SPI_MODE2 et SPI_MODE3 ne fonctionnent pas).
Les broches SPI habituelles sont:
- MOSI = GPIO13
- MISO = GPIO12
- SCLK = GPIO14
Il existe un mode étendu dans lequel vous pouvez remplacer les broches normales par les broches matérielles SPI0. Ceci est activé en appelant
SPI.pins (6, 7, 8, 0) avant l'appel de SPI.begin (). Les épingles deviendraient:
- MOSI = SD1
- MISO = SD0
- SCLK = CLK
- HWCS = GPIO0
Ce mode partage les broches SPI avec le contrôleur qui lit le code du programme dans la mémoire flash et est contrôlé par un arbitre matériel (la mémoire flash a toujours une priorité plus élevée). Pour ce mode, le CS sera contrôlé par le matériel, car vous ne pouvez pas gérer la ligne CS avec un GPIO, vous ne savez jamais vraiment quand l'arbitre va vous accorder l'accès au bus, vous devez donc le laisser gérer automatiquement le CS.
Spécifique à l'ESP
API Certaines API liées à la veille profonde, au RTC et aux mémoires flash sont disponibles dans l'objet ESP. ESP.deepSleep (microsecondes, mode) mettra la puce en veille profonde. le mode est l'un des WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED. (GPIO16 doit être lié à la TVD pour sortir de DeepSleep.)
ESP.rtcUserMemoryWrite (offset, & data, sizeof (data)) et ESP. rtcUserMemoryRead (offset, & data, sizeof (data)) permet aux données d'être stockées et extraites de la mémoire utilisateur RTC de la puce, respectivement. La taille totale de la mémoire de l'utilisateur RTC est de 512 octets. Par conséquent, l'offset + la taille de (données) ne doit pas dépasser 512. Les données doivent être alignées sur 4 octets. Les données stockées peuvent être conservées entre les cycles de sommeil profond. Cependant, les données peuvent être perdues après un redémarrage de la puce.
ESP.restart () redémarre le processeur.
ESP.getResetReason () renvoie une chaîne contenant le dernier motif de réinitialisation au format lisible par l'homme.
ESP.getFreeHeap () renvoie la taille de segment libre.
ESP.getChipId () renvoie l'ID de la puce ESP8266 sous forme d'entier 32 bits.
ESP.getCoreVersion () renvoie une chaîne contenant la version principale.
ESP.getSdkVersion () renvoie la version du SDK sous forme de caractère.
ESP.getCpuFreqMHz () renvoie la fréquence de la CPU en MHz sous forme d'entier non signé de 8 bits.
ESP.getSketchSize () renvoie la taille de l'esquisse en cours sous forme d'entier 32 bits non signé.
ESP.getFreeSketchSpace () renvoie l'espace d'esquisse libre sous forme d'entier 32 bits non signé.
ESP.getSketchMD5 () renvoie une chaîne en minuscule contenant le MD5 de l'esquisse en cours.
ESP.getFlashChipId () renvoie l'ID de puce flash sous forme d'entier 32 bits.
ESP.getFlashChipSize () renvoie la taille de la puce flash, en octets, telle que vue par le SDK (peut être inférieure à la taille réelle).
ESP.getFlashChipRealSize () renvoie la taille réelle de la puce, en octets, en fonction de l'ID de la puce flash.
ESP.getFlashChipSpeed (void) renvoie la fréquence de la puce du flash, en Hz.
ESP.getCycleCount () renvoie le nombre de cycles d'instruction cpu depuis le début sous la forme d'un fichier 32 bits non signé. Ceci est utile pour synchroniser avec précision des actions très courtes telles que le bit banging.
ESP.getVcc () peut être utilisé pour mesurer la tension d'alimentation. ESP doit reconfigurer le CAN au démarrage pour que cette fonctionnalité soit disponible. Ajoutez la ligne suivante en haut de votre dessin pour utiliser getVcc:
ADC_MODE (ADC_VCC);
La broche TOUT doit être déconnectée dans ce mode.
Notez que par défaut, ADC est configuré pour lire à partir de la broche TOUT à l'aide de analogRead (A0), et que ESP.getVCC () n'est pas disponible.
Répondeur mDNS et DNS-SD (bibliothèque ESP8266mDNS)
Permet à l'esquisse de répondre à des requêtes DNS multidiffusion pour des noms de domaine tels que «foo.local» et des requêtes DNS-SD (découverte du service). Voir l'exemple ci-joint pour plus de détails.
Répondeur SSDP (ESP8266SSDP)
SSDP est un autre protocole de découverte de service, pris en charge immédiatement par Windows. Voir l'exemple ci-joint pour référence.
Serveur DNS (bibliothèque DNSServer)
Implémente un serveur DNS simple pouvant être utilisé en mode STA et AP. Le serveur DNS ne prend actuellement en charge qu'un seul domaine (pour tous les autres domaines, il répondra avec NXDOMAIN ou un code d'état personnalisé). Grâce à lui, les clients peuvent ouvrir un serveur Web s'exécutant sur ESP8266 en utilisant un nom de domaine et non une adresse IP.