diff --git a/Programmation/Deplacement.ino b/Programmation/Deplacement.ino new file mode 100644 index 0000000..801578e --- /dev/null +++ b/Programmation/Deplacement.ino @@ -0,0 +1,344 @@ +/* +============================================================================================================== +Pour que le programme fonctionne correctement les servos moteurs doivent être connecté de la façon suivante : +Pour une patte les 3 servos doivent se suivrent (ex : pin0 ,pin1, pin2) +Les tibia doivent être sur les pins 0 - 3 - 6 - 9 - 12 - 15 +Les femur doivent être sur les pins 1 - 4 - 7 - 10 - 13 +Les coxa doivent être sur les pins 2 - 5 - 8 - 11 - 14 +============================================================================================================== + */ + +#include +#include +#include + +Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); +Servo servo16; //femur patte 5 +Servo servo17; //coxa patte 5 + +#define TIBIA_MIN 150 //tibia en haut +#define TIBIA_MAX 400 //tibia en bas +#define TIBIA_CALIBRATE 220 //62° + +#define FEMUR_MIN 200 //200 +#define FEMUR_MAX 490 //500 +#define FEMUR_CALIBRATE 420 //115° + +#define COXA_MIN 100 //coxa à gauche +#define COXA_MAX 550 //coxa à droite +#define COXA_CALIBRATE 320 //90° + +#define AVANT 0 +#define AVANT_GAUCHE 1 +#define AVANT_DROITE 5 +#define ARRIERE 3 +#define ARRIERE_GAUCHE 4 +#define ARRIERE_DROITE 2 + +struct legPart { //Structure donnant accées aux paramètres d'une patte + int legMin; + int legMax; + int legCalibrate; +} legPart; + +struct legPart tibia; +struct legPart femur; +struct legPart coxa; + +int patte[6][3]; //chaque patte est un tableau contenant le numero du pin pour tibia/femur/coxa. Ex : acceder au pin du gémur patte 2 -> patte[1][0] + +struct capteurs { //structure donnant accées aux valeurs des 3 capteurs + int avant; + int droite; + int gauche; +} capteurs; + +struct capteurs cap; + +//capteur ultrason +const byte TRIGGER_AVANT = 2; // Broche TRIGGER +const byte ECHO_AVANT = 3; // Broche ECHO +const byte TRIGGER_DROITE = 4; // Broche TRIGGER +const byte ECHO_DROITE = 5; // Broche ECHO +const byte TRIGGER_GAUCHE = 6; // Broche TRIGGER +const byte ECHO_GAUCHE = 7; // Broche ECHO +const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s +const float SOUND_SPEED = 340.0 / 1000; + +void setup() +{ + pinMode(TRIGGER_AVANT, OUTPUT); + pinMode(TRIGGER_DROITE, OUTPUT); + pinMode(TRIGGER_GAUCHE, OUTPUT); + digitalWrite(TRIGGER_AVANT, LOW); // La broche TRIGGER doit être à LOW au repos + digitalWrite(TRIGGER_DROITE, LOW); // La broche TRIGGER doit être à LOW au repos + digitalWrite(TRIGGER_GAUCHE, LOW); // La broche TRIGGER doit être à LOW au repos + pinMode(ECHO_AVANT, INPUT); + pinMode(ECHO_DROITE, INPUT); + pinMode(ECHO_GAUCHE, INPUT); + + + servo16.attach(10); //femur + servo17.attach(11); //coxa + Serial.begin(9600); + pwm.begin(); + pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates + + tibia={TIBIA_MIN,TIBIA_MAX,TIBIA_CALIBRATE}; + femur={FEMUR_MIN,FEMUR_MAX,FEMUR_CALIBRATE}; + coxa={COXA_MIN,COXA_MAX,COXA_CALIBRATE}; + + int numPin=0; //assigne les pins + for(int i=0; i<6; i++) + { + for(int j=0; j<3; j++) + { + patte[i][j]=numPin; + numPin++; + } + patte[5][1]=100; + patte[5][2]=100; + } +delay(10); +} + + +// Permet de convertir les degrés en pulselen +int degToPuls(int degrees, struct legPart leg) { + return(map(degrees, 0, 180, leg.legMin, leg.legMax)); +} +// Permet de convertir les pulselen en degrés +int pulsToDeg(int pulselen, struct legPart leg) { + return(map(pulselen, leg.legMin, leg.legMax, 0, 180)); +} + +/* +======================================== +Fonctions de contôle des servos moteurs +======================================== +*/ + +//commander une patte +void mouvPatte(int patteNum, int tibiaPuls, int femurPuls, int coxaPuls){ + + pwm.setPWM(patte[patteNum][0],0, tibiaPuls); + + if(patte[patteNum][1]==100) + {servo16.write(pulsToDeg(femurPuls,femur));} + else + {pwm.setPWM(patte[patteNum][1],0,femurPuls);} + + if(patte[patteNum][2]==100) + {servo17.write(pulsToDeg(coxaPuls,coxa));} + else + {pwm.setPWM(patte[patteNum][2],0, coxaPuls);} +} + + +// Mettre toutes les pattes à la même position +void all(int tibiaPuls, int femurPuls, int coxaPuls){ + for(int i=0; i<6; i++){ + mouvPatte(i, tibiaPuls, femurPuls, coxaPuls); + } +} + +/* + ================== + Mouvements de base + ================== + */ + +void tourneGauche(int vitesse){ + mouvPatte(1,TIBIA_CALIBRATE,350,410); + mouvPatte(4,TIBIA_CALIBRATE,350,410); + delay(vitesse); + mouvPatte(1,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); + mouvPatte(4,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); + delay(vitesse); + mouvPatte(2,TIBIA_CALIBRATE,350,410); + mouvPatte(5,TIBIA_CALIBRATE,350,410); + delay(vitesse); + mouvPatte(2,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); + mouvPatte(5,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); + delay(vitesse); + mouvPatte(0,TIBIA_CALIBRATE,350,410); + mouvPatte(3,TIBIA_CALIBRATE,350,410); + delay(vitesse); + mouvPatte(0,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); + mouvPatte(3,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); + delay(vitesse); + all(TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); + delay(vitesse); +} + +void tourneDroite(int vitesse){ + mouvPatte(1,TIBIA_CALIBRATE,350,230); + mouvPatte(4,TIBIA_CALIBRATE,350,230); + delay(vitesse); + mouvPatte(1,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); + mouvPatte(4,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); + delay(vitesse); + mouvPatte(2,TIBIA_CALIBRATE,350,230); + mouvPatte(5,TIBIA_CALIBRATE,350,230); + delay(vitesse); + mouvPatte(2,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); + mouvPatte(5,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); + delay(vitesse); + mouvPatte(0,TIBIA_CALIBRATE,350,230); + mouvPatte(3,TIBIA_CALIBRATE,350,230); + delay(vitesse); + mouvPatte(0,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); + mouvPatte(3,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); + delay(vitesse); + all(TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); + delay(vitesse); +} + +void lever(void){ + all(TIBIA_MIN,FEMUR_MIN,COXA_CALIBRATE); + delay(200); + all(TIBIA_MIN,250,COXA_CALIBRATE); + delay(200); + all(TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); + delay(500); +} + +void faireUnPas(int mode, int vitesse) //mode = direction +{ +mouvPatte((2+mode)%6,TIBIA_CALIBRATE, 350, 230); + delay(vitesse); + mouvPatte((2+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, 230); + delay(vitesse); + mouvPatte((4+mode)%6,TIBIA_CALIBRATE, 350, 410); + delay(vitesse); + mouvPatte((4+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, 410); + delay(vitesse); + mouvPatte((0+mode)%6,TIBIA_CALIBRATE, 350, COXA_CALIBRATE); + mouvPatte((3+mode)%6,TIBIA_CALIBRATE, 350, COXA_CALIBRATE); + delay(vitesse); + mouvPatte((2+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, COXA_CALIBRATE); + mouvPatte((4+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, COXA_CALIBRATE); + mouvPatte((1+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, 410); + mouvPatte((5+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, 230); + delay(vitesse); + mouvPatte((0+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, COXA_CALIBRATE); + mouvPatte((3+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, COXA_CALIBRATE); + delay(vitesse); + mouvPatte((1+mode)%6,TIBIA_CALIBRATE, 350, COXA_CALIBRATE); + delay(vitesse); + mouvPatte((1+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, COXA_CALIBRATE); + delay(vitesse); + mouvPatte((5+mode)%6,TIBIA_CALIBRATE, 350, COXA_CALIBRATE); + delay(vitesse); + mouvPatte((5+mode)%6,TIBIA_CALIBRATE, FEMUR_CALIBRATE, COXA_CALIBRATE); + delay(vitesse); +} + +/* + ============================= + Fonctions liées aux capteurs + ============================= + */ +void getCapteurs() +{ + digitalWrite(TRIGGER_AVANT, HIGH); + delayMicroseconds(10); + digitalWrite(TRIGGER_AVANT, LOW); + long measure_avant = pulseIn(ECHO_AVANT, HIGH, MEASURE_TIMEOUT); + cap.avant = measure_avant / 20.0 * SOUND_SPEED; + + digitalWrite(TRIGGER_DROITE, HIGH); + delayMicroseconds(10); + digitalWrite(TRIGGER_DROITE, LOW); + long measure_droite = pulseIn(ECHO_DROITE, HIGH, MEASURE_TIMEOUT); + cap.droite = measure_droite / 20.0 * SOUND_SPEED; + + + digitalWrite(TRIGGER_GAUCHE, HIGH); + delayMicroseconds(10); + digitalWrite(TRIGGER_GAUCHE, LOW); + long measure_gauche = pulseIn(ECHO_GAUCHE, HIGH, MEASURE_TIMEOUT); + cap.gauche = measure_gauche / 20.0 * SOUND_SPEED; +} + +void afficheCapteurs() +{ + Serial.print("Avant : "); + Serial.println(cap.avant); + Serial.print("Droite : "); + Serial.println(cap.droite); + Serial.print("Gauche "); + Serial.println(cap.gauche); + Serial.println("=============="); +} + +/* + ======================== + Séquences de mouvements + ======================== + */ + +void marcheClassique(int vitesse) +{ + getCapteurs(); + if((cap.avant<20 and cap.droite< cap.gauche)) + { + tourneGauche(vitesse); + delay(300); + tourneGauche(vitesse); + delay(300); + tourneGauche(vitesse); + delay(300); + tourneGauche(vitesse); + delay(300); + } + else if((cap.avant<20 and cap.droite> cap.gauche) or cap.gauche<20) + { + tourneDroite(vitesse); + delay(300); + tourneDroite(vitesse); + delay(300); + tourneDroite(vitesse); + delay(300); + tourneDroite(vitesse); + delay(300); + } + else if(cap.droite<20) + { + tourneGauche(vitesse); + } + else if(cap.gauche<20) + { + tourneDroite(vitesse); + } + else + { + faireUnPas(AVANT,vitesse); + } +} + +void longeMur(int vitesse) +{ + getCapteurs(); + if(cap.droite<15) + { + faireUnPas(AVANT_GAUCHE,vitesse); + } + else if(cap.droite>25) + { + faireUnPas(AVANT_DROITE,vitesse); + } + else + { + faireUnPas(AVANT,vitesse); + } +} + +void loop() +{ + +marcheClassique(50); +delay(500); + +} + diff --git a/Programmation/Deplacement/Deplacement.ino b/Programmation/Deplacement/Deplacement.ino deleted file mode 100644 index 6b1b799..0000000 --- a/Programmation/Deplacement/Deplacement.ino +++ /dev/null @@ -1,196 +0,0 @@ -/* -Pour que le programme fonctionne correctement les servos moteurs doivent être connecté de la façon suivante : -Pour une patte les 3 servos doivent se suivrent (ex : pin0 ,pin1, pin2) -Les tibia doivent être sur les pins 0 - 3 - 6 - 9 - 12 - 15 -Les femur doivent être sur les pins 1 - 4 - 7 - 10 - 13 -Les coxa doivent être sur les pins 2 - 5 - 8 - 11 - 14 - */ -#include -#include -#include - -Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); -Servo servo16; //femur -Servo servo17; //coxa - -#define TIBIA_MIN 150 //tibia en haut -#define TIBIA_MAX 400 //tibia en bas -#define TIBIA_CALIBRATE 220 //62° - -#define FEMUR_MIN 200 //200 -#define FEMUR_MAX 490 //500 -#define FEMUR_CALIBRATE 420 //115° - -#define COXA_MIN 100 //coxa à gauche -#define COXA_MAX 550 //coxa à droite -#define COXA_CALIBRATE 320 //90° - -struct legPart { - int legMin; - int legMax; - int legCalibrate; -} legPart; - -struct legPart tibia; -struct legPart femur; -struct legPart coxa; - -int patte[6][3]; //chaque patte est un tableau contenant le numero du pin pour tibia/femur/coxa. Ex : acceder au pin du gémur patte 2 -> patte[1][0] - - -void setup() { - servo16.attach(10); //femur - servo17.attach(11); //coxa - Serial.begin(9600); - pwm.begin(); - pwm.setPWMFreq(60); // Analog servos run at ~60 Hz updates - - tibia={TIBIA_MIN,TIBIA_MAX,TIBIA_CALIBRATE}; - femur={FEMUR_MIN,FEMUR_MAX,FEMUR_CALIBRATE}; - coxa={COXA_MIN,COXA_MAX,COXA_CALIBRATE}; - - int numPin=0; //assigne les pins - for(int i=0; i<6; i++){ - for(int j=0; j<3; j++){ - patte[i][j]=numPin; - numPin++; - } - patte[5][1]=100; - patte[5][2]=100; - } - delay(10); -} - - -// Permet de convertir les degrés en pulselen -int degToPuls(int degrees, struct legPart leg) { - return(map(degrees, 0, 180, leg.legMin, leg.legMax)); -} -// Permet de convertir les pulselen en degrés -int pulsToDeg(int pulselen, struct legPart leg) { - return(map(pulselen, leg.legMin, leg.legMax, 0, 180)); -} - -//commander une patte -void mouvPatte(int patteNum, int tibiaPuls, int femurPuls, int coxaPuls){ - - pwm.setPWM(patte[patteNum][0],0, tibiaPuls); - - if(patte[patteNum][1]==100) - {servo16.write(pulsToDeg(femurPuls,femur));} - else - {pwm.setPWM(patte[patteNum][1],0,femurPuls);} - - if(patte[patteNum][2]==100) - {servo17.write(pulsToDeg(coxaPuls,coxa));} - else - {pwm.setPWM(patte[patteNum][2],0, coxaPuls);} -} - - -// Mettre toutes les pattes à la même position -void all(int tibiaPuls, int femurPuls, int coxaPuls){ - for(int i=0; i<6; i++){ - mouvPatte(i, tibiaPuls, femurPuls, coxaPuls); - } -} - -void marcheAvant(int vitesse){ - mouvPatte(5,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(5,TIBIA_CALIBRATE,350,410); - delay(vitesse); - mouvPatte(5,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); - delay(vitesse); - mouvPatte(2,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(2,TIBIA_CALIBRATE,350,230); - delay(vitesse); - mouvPatte(2,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); - delay(vitesse); - mouvPatte(0,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - mouvPatte(3,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(5,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - mouvPatte(1,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); - mouvPatte(4,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); - mouvPatte(2,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(0,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - mouvPatte(3,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(1,TIBIA_CALIBRATE,350,410); - delay(vitesse); - mouvPatte(1,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(1,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(4,TIBIA_CALIBRATE,350,230); - delay(vitesse); - mouvPatte(4,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(4,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(vitesse); -} - -void marcheArriere(int vitesse){ - mouvPatte(2,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(2,TIBIA_CALIBRATE,350,410); - delay(vitesse); - mouvPatte(2,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); - delay(vitesse); - mouvPatte(5,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(5,TIBIA_CALIBRATE,350,230); - delay(vitesse); - mouvPatte(5,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); - delay(vitesse); - mouvPatte(3,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - mouvPatte(0,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(2,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - mouvPatte(4,TIBIA_CALIBRATE,FEMUR_CALIBRATE,410); - mouvPatte(1,TIBIA_CALIBRATE,FEMUR_CALIBRATE,230); - mouvPatte(5,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(3,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - mouvPatte(0,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(4,TIBIA_CALIBRATE,350,410); - delay(vitesse); - mouvPatte(4,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(4,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(1,TIBIA_CALIBRATE,350,230); - delay(vitesse); - mouvPatte(1,TIBIA_CALIBRATE,350,COXA_CALIBRATE); - delay(vitesse); - mouvPatte(1,TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(vitesse); -} - -void tourneGauche(int vitesse){ - //mouvPatte(); -} - -void lever(void){ - all(TIBIA_MIN,FEMUR_MIN,COXA_CALIBRATE); - delay(200); - all(TIBIA_MIN,250,COXA_CALIBRATE); - delay(200); - all(TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(500); -} -void loop() { - all(TIBIA_CALIBRATE,FEMUR_CALIBRATE,COXA_CALIBRATE); - delay(3000); - marcheAvant(100); - marcheAvant(100); - marcheAvant(100); - marcheAvant(100); - marcheAvant(100); - marcheAvant(100); - delay(6000); -} diff --git a/Programmation/Distance/Distance.ino b/Programmation/Distance/Distance.ino deleted file mode 100644 index c3c31fe..0000000 --- a/Programmation/Distance/Distance.ino +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Code d'exemple pour un capteur à ultrasons HC-SR04. - */ - -/* Constantes pour les broches */ -const byte TRIGGER_PIN = 9; // Broche TRIGGER -const byte ECHO_PIN = 8; // Broche ECHO - -/* Constantes pour le timeout */ -const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s - -/* Vitesse du son dans l'air en mm/us */ -const float SOUND_SPEED = 340.0 / 1000; - -/** Fonction setup() */ -void setup() { - - /* Initialise le port série */ - Serial.begin(115200); - - /* Initialise les broches */ - pinMode(TRIGGER_PIN, OUTPUT); - digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos - pinMode(ECHO_PIN, INPUT); -} - -/** Fonction loop() */ -void loop() { - - /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */ - digitalWrite(TRIGGER_PIN, HIGH); - delayMicroseconds(10); - digitalWrite(TRIGGER_PIN, LOW); - - /* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */ - long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT); - - /* 3. Calcul la distance à partir du temps mesuré */ - float distance_mm = measure / 2.0 * SOUND_SPEED; - - /* Affiche les résultats en mm, cm et m */ - Serial.print("Distance: "); - Serial.print(distance_mm); - Serial.print("mm ("); - Serial.print(distance_mm / 10.0, 2); - Serial.print("cm, "); - Serial.print(distance_mm / 1000.0, 2); - Serial.println("m)"); - - /* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */ - delay(500); -} diff --git a/Programmation/RSSI.ino b/Programmation/RSSI.ino new file mode 100644 index 0000000..27fa67f --- /dev/null +++ b/Programmation/RSSI.ino @@ -0,0 +1,116 @@ +/* + WriteSingleField + + Description: Writes a value to a channel on ThingSpeak every 20 seconds. + + Hardware: Arduino compatible hardware controlling ESP8266 through AT commands. THIS IS CODE FOR THE ARDUINO, NOT THE ESP8266! + + !!! IMPORTANT - Modify the secrets.h file for this project with your network connection and ThingSpeak channel details. !!! + + Note: + - Requires Arduino main board connected to ESP8266 (ESP-01) serial pins + - The ESP8266 device must be running firmware capable of AT commands over TX/RX pins. + Details on reflashing and binaries can be found here: https://www.espressif.com/en/support/download/at + - Requires WiFiEsp library which is available through the Library Manager. The logging level for the WiFiEsp library is set to INFO. + To disable logging completely, set _ESPLOGLEVEL_ to 0 in \Arduino\libraries\WiFiEsp\src\utility\debug.h + - Use TX1/RX1 if present on Arduino header (Mega, Due, etc). If not, then connect TX to pin 7, RX to pin 6. + - Some boards (Uno, Nano, Leonardo, etc) do not have enough memory to handle writing large strings to ThingSpeak. + For these boards, keep individual field data lengths 32 characters or less. + - This example is written for a network using WPA encryption. For WEP or WPA, change the WiFi.begin() call accordingly. + + Wiring diagrams are available at: + SoftSerial (Uno, Nano, Mini, etc): https://github.com/mathworks/thingspeak-arduino/blob/master/ESP-01_AT_Commands_SoftSerial_Hookup.pdf + Hardware Serial1 (Mega, Leonardo, Due) - https://github.com/mathworks/thingspeak-arduino/blob/master/ESP-01_AT_Commands_Hardware_Serial_Hookup.pdf + + ESP8266 | Arduino without Serial1 | Arduino with Serial1 + -------------------------------------------------------- + RX | pin 7 | TX1 + TX | pin 6 | RX1 + GND | GND | GND + VCC | 5V | 5V + CH_PD | 5V | 5V + + ThingSpeak ( https://www.thingspeak.com ) is an analytic IoT platform service that allows you to aggregate, visualize, and + analyze live data streams in the cloud. Visit https://www.thingspeak.com to sign up for a free account and create a channel. + + Documentation for the ThingSpeak Communication Library for Arduino is in the README.md folder where the library was installed. + See https://www.mathworks.com/help/thingspeak/index.html for the full ThingSpeak documentation. + + For licensing information, see the accompanying license file. + + Copyright 2019, The MathWorks, Inc. +*/ + + + +#include "WiFiEsp.h" + +char ssid[] = SECRET_SSID; // your network SSID (name) +char pass[] = SECRET_PASS; // your network password + +WiFiEspClient client; + +#include "SoftwareSerial.h" +SoftwareSerial Serial1(6, 7); +#define ESP_BAUDRATE 115200 + + +void setup() { + //Initialize serial and wait for port to open + Serial.begin(9600); + + // initialize serial for ESP module + setEspBaudRate(ESP_BAUDRATE); + + Serial.print("Searching for ESP8266..."); + // initialize ESP module + WiFi.init(&Serial1); + +} + +void loop() { + mesureRSSI(); + delay(5000); +} + +// This function attempts to set the ESP8266 baudrate. Boards with additional hardware serial ports +// can use 115200, otherwise software serial is limited to 19200. +void setEspBaudRate(unsigned long baudrate){ + long rates[6] = {115200,74880,57600,38400,19200,9600}; + + Serial.print("Setting ESP8266 baudrate to "); + Serial.print(baudrate); + Serial.println("..."); + + for(int i = 0; i < 6; i++){ + Serial1.begin(rates[i]); + delay(100); + Serial1.print("AT+UART_DEF="); + Serial1.print(baudrate); + Serial1.print(",8,1,0,0\r\n"); + delay(100); + } + Serial1.begin(baudrate); +} + +void mesureRSSI(){ + Serial.println("Prise de mesure\n"); + // Connect or reconnect to WiFi + 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. Change this line if using open or WEP network + //Serial.print("."); + delay(100); + } + //Serial.println("\nConnected"); + } + + int rssi = 0; + while(rssi==0){ + rssi = WiFi.RSSI(); + } + Serial.print("RSSI : "); + Serial.println(rssi); +} -- libgit2 0.21.2