Voici le programme :
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
const char* ssid = "**";
const char* password = "**";
//**********DFPLAYER***********
HardwareSerial hwSerial(1);
#include "DFRobotDFPlayerMini.h"
#define FOLDER_title 1
#define FOLDER_directions 2
#define FOLDER_speed 3
#define FOLDER_text 4
static unsigned long timer = millis();
int randNumber;
int randomSpeed;
int maxSpeed;
int dir;
int windSpeedAvg; // speed miles per hour
int readIndex = 0;
int total = 0;
int windDirection = 0;
int windSpeedMax = 0;
int windHeading = 0;
char *sectors[ ] = {"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW", "N"};
String compassDir = "";
int index1;
int number = 0;
const byte degres[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
DFRobotDFPlayerMini dfPlayer;
void printDetail(uint8_t type, int value);
unsigned long timerDelay = 10000;
String jsonBuffer;
void setup() {
Serial.begin(115200);
hwSerial.begin(9600, SERIAL_8N1, 18, 19); // speed, type, TX, RX
WiFi.begin(ssid, password);
Serial.println("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to WiFi network with IP Address: ");
Serial.println(WiFi.localIP());
Serial.println("Timer set to 10 seconds (timerDelay variable), it will take 10 seconds before publishing the first reading.");
//************DFPLAYER*************************
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!dfPlayer.begin(hwSerial)) {
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while (true);
}
Serial.println(F("DFPlayer Mini online."));
dfPlayer.setTimeOut(500);
dfPlayer.EQ(DFPLAYER_EQ_NORMAL);
dfPlayer.outputDevice(DFPLAYER_DEVICE_SD);
dfPlayer.volume(5); //Set volume value. From 0 to 30
}
void loop() {
// Send an HTTP GET request
if ((millis() - lastTime) > timerDelay) {
Serial.println("Test");
if (WiFi.status() == WL_CONNECTED) {
String serverPath = "http://api.pioupiou.fr/v1/live/596";
jsonBuffer = httpGETRequest(serverPath.c_str());
Serial.println(jsonBuffer);
JSONVar myObject = JSON.parse(jsonBuffer);
if (JSON.typeof(myObject) == "undefined") {
Serial.println("Parsing input failed!");
return;
}
windHeading = (myObject["data"]["measurements"]["wind_heading"]);
windSpeedAvg = (myObject["data"]["measurements"]["wind_speed_avg"]);
windSpeedMax = (myObject["data"]["measurements"]["wind_speed_max"]);
getHeading(windHeading);
dfPlayer.volume(6);
delay(1000);
voice();
Serial.print("JSON object = ");
Serial.println(myObject);
Serial.print("Balise : ");
Serial.println(myObject["data"]["id"]);
Serial.print("BaliseName : ");
Serial.println(myObject["data"]["meta"]["name"]);
Serial.print("WindSpeedAvg : ");
Serial.println(myObject["data"]["measurements"]["wind_speed_avg"]);
// getHeading(windHeading);
Serial.print("WindHeading : ");
Serial.println(myObject["data"]["measurements"]["wind_heading"]);
Serial.print("Direction : ");
Serial.println(compassDir);
Serial.print("WindSpeedMax : ");
Serial.println(myObject["data"]["measurements"]["wind_speed_max"]);
}
else {
Serial.println("WiFi Disconnected");
}
lastTime = millis();
}
}
String httpGETRequest(const char* serverName) {
HTTPClient http;
http.begin(serverName);
int httpResponseCode = http.GET();
String payload = "{}";
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
payload = http.getString();
}
else {
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
// Free resources
http.end();
return payload;
}
void voice() {
// randNumber = random(1, 7);
// Serial.println(randNumber);
// Serial.println(index);
// switch (randNumber) {
switch (number) {
case 0:
Serial.println(F("NORD"));
dir = 0;
break;
case 1:
Serial.println(F("NORD-NORD-EST"));
dir = 1;
break;
case 2:
Serial.println(F("NORD-EST"));
dir = 2;
break;
case 3:
Serial.println(F("EST-NORD-EST"));
dir = 3;
break;
case 4:
Serial.println(F("EST"));
dir = 4;
break;
case 5:
Serial.println(F("EST-SUD-EST"));
dir = 5;
break;
case 6:
Serial.println(F("SUD-EST"));
dir = 6;
break;
case 7:
Serial.println(F("SUD-SUD-EST"));
dir = 7;
break;
case 8:
Serial.println(F("SUD"));
dir = 8;
break;
case 9:
Serial.println(F("SUD-SUD-OUEST"));
dir = 9;
break;
case 10:
Serial.println(F("SUD-OUEST"));
dir = 10;
break;
case 11:
Serial.println(F("OUEST-SUD-OUEST"));
dir = 11;
break;
case 12:
Serial.println(F("OUEST"));
dir = 12;
break;
case 13:
Serial.println(F("OUEST-NORD-OUEST"));
dir = 13;
break;
case 14:
Serial.println(F("NORD-OUEST"));
dir = 14;
break;
case 15:
Serial.println(F("NORD-NORD-OUEST"));
dir = 15;
break;
case 16:
Serial.println(F("NORD"));
dir = 16;
break;
default:
break;
};
dfPlayer.playFolder(FOLDER_title, 1);
delay(1500);
dfPlayer.playFolder(FOLDER_directions, dir);
delay(1500);
dfPlayer.playFolder(FOLDER_speed, windSpeedAvg);
delay(1000);
dfPlayer.playFolder(FOLDER_text, 1);
delay(1000);
dfPlayer.playFolder(FOLDER_speed, windSpeedMax);
delay(1000);
dfPlayer.playFolder(FOLDER_text, 2);
if (dfPlayer.available()) {
printDetail(dfPlayer.readType(), dfPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
}
void printDetail(uint8_t type, int value) {
switch (type) {
case TimeOut:
Serial.println(F("Time Out!"));
break;
case WrongStack:
Serial.println(F("Stack Wrong!"));
break;
case DFPlayerCardInserted:
Serial.println(F("Card Inserted!"));
break;
case DFPlayerCardRemoved:
Serial.println(F("Card Removed!"));
break;
case DFPlayerCardOnline:
Serial.println(F("Card Online!"));
break;
case DFPlayerPlayFinished:
Serial.print(F("Number:"));
Serial.print(value);
Serial.println(F(" Play Finished!"));
break;
case DFPlayerError:
Serial.print(F("DFPlayerError:"));
switch (value) {
case Busy:
Serial.println(F("Card not found"));
break;
case Sleeping:
Serial.println(F("Sleeping"));
break;
case SerialWrongStack:
Serial.println(F("Get Wrong Stack"));
break;
case CheckSumNotMatch:
Serial.println(F("Check Sum Not Match"));
break;
case FileIndexOut:
Serial.println(F("File Index Out of Bound"));
break;
case FileMismatch:
Serial.println(F("Cannot Find File"));
break;
case Advertise:
Serial.println(F("In Advertise"));
break;
default:
break;
}
break;
default:
break;
}
}
void getHeading(int direction) {
int index = windHeading % 360;//modulo
index = round(index / 22.5);
number = (degres[index]);
Serial.print("Index = "); Serial.println(index);
Serial.print("Number = "); Serial.println(number);
compassDir = (sectors[index]);
}