int R=19;
int G=17;
int B=18;
int R1=21;
int G1=15;
int B1=16;
int R2=12;
int G2=13;
int B2=14;
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#define USE_SERIAL Serial
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define WIFI_CHANNEL 6
void setup() {
pinMode(R,OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
Serial.begin(115200);
for(uint8_t t = 4; t > 0; t--) {
Serial.printf(("[SETUP] WAIT %d...\n"), t);
Serial.flush();
delay(1000);
}
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print(F("Connecting to WiFi "));
Serial.print(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(F("."));
}
Serial.println(F(" Connected!"));
Serial.print(F("IP address: "));
Serial.println(WiFi.localIP());
}
void loop() {
if((WiFi.status() == WL_CONNECTED)) {
HTTPClient http;
Serial.print(F("[HTTP] begin...\n"));
http.begin("https://data.moenv.gov.tw/api/v2/aqx_p_02?api_key=e8dd42e6-9b8b-43f8-991e-b3dee723a52d&limit=1000&sort=datacreationdate%20desc&format=JSON");
Serial.print(F("[HTTP] GET...\n"));
int httpCode = http.GET();
if(httpCode > 0) {
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
DynamicJsonDocument doc(16384);
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
return;
}
for (JsonObject field : doc["fields"].as<JsonArray>()) {
const char* field_id = field["id"];
const char* field_type = field["type"];
const char* field_info_label = field["info"]["label"];
}
const char* resource_id = doc["resource_id"];
const char* extras_api_key = doc["__extras"]["api_key"];
bool include_total = doc["include_total"];
const char* total = doc["total"];
const char* resource_format = doc["resource_format"];
const char* limit = doc["limit"];
const char* offset = doc["offset"];
const char* links_start = doc["_links"]["start"];
const char* links_next = doc["_links"]["next"];
for (JsonObject record : doc["records"].as<JsonArray>()) {
const char* record_site = record["site"];
const char* record_county = record["county"];
const char* record_pm25 = record["pm25"];
const char* record_datacreationdate = record["datacreationdate"];
const char* record_itemunit = record["itemunit"];
{
if (record["site"] == "馬祖") {
String s = record["site"];
Serial.print(s);
delay (500);
String p = record["pm25"];
Serial.print(F(" PM2.5="));
Serial.print(p);
delay (500);
String u = record["itemunit"];
Serial.print(u);
Serial.print(F(",時間="));
String t = record["datacreationdate"];
Serial.println(t);
int v = atoi(record["pm25"]);
//Serial.println(v);
delay(2000);
if(v>0 && v<50){
analogWrite(R,0);
analogWrite(G,250);
analogWrite(B,0);
}
else if(v>51 && v<100){
analogWrite(R,250);
analogWrite(G,250);
analogWrite(B,0);
}
else if(v>101 && v<150){
analogWrite(R,250);
analogWrite(G,150);
analogWrite(B,0);
}
else if(v>151 && v<200){
analogWrite(R,250);
analogWrite(G,0);
analogWrite(B,0);
}
else if(v>201 && v<300){
analogWrite(R,250);
analogWrite(G,0);
analogWrite(B,250);
}
else if(v>301 && v<500){
analogWrite(R,150);
analogWrite(G,0);
analogWrite(B,0);
}
}
}
{
if (record["site"] == "臺南") {
String s = record["site"];
Serial.print(s);
delay (500);
String p = record["pm25"];
Serial.print(F(" PM2.5="));
Serial.print(p);
delay (500);
String u = record["itemunit"];
Serial.print(u);
Serial.print(F(",時間="));
String t = record["datacreationdate"];
Serial.println(t);
int v = atoi(record["pm25"]);
//Serial.println(v);
delay(2000);
if(v>0 && v<50){
analogWrite(R1,0);
analogWrite(G1,250);
analogWrite(B1,0);
}
else if(v>51 && v<100){
analogWrite(R1,250);
analogWrite(G1,250);
analogWrite(B1,0);
}
else if(v>101 && v<150){
analogWrite(R1,250);
analogWrite(G1,150);
analogWrite(B1,0);
}
else if(v>151 && v<200){
analogWrite(R1,250);
analogWrite(G1,0);
analogWrite(B1,0);
}
else if(v>201 && v<300){
analogWrite(R1,250);
analogWrite(G1,0);
analogWrite(B1,250);
}
else if(v>301 && v<500){
analogWrite(R1,150);
analogWrite(G1,0);
analogWrite(B1,0);
}
}
}
{
if(record["site"] == "金門"){
String s = record["site"];
Serial.print(s);
delay (500);
String p = record["pm25"];
Serial.print(F(" PM2.5="));
Serial.print(p);
delay (500);
String u = record["itemunit"];
Serial.print(u);
Serial.print(F(",時間="));
String t = record["datacreationdate"];
Serial.println(t);
int v=atoi(record["pm25"]);
//Serial.println(v);
delay(2000);
if(v>0 && v<50){
analogWrite(R2,0);
analogWrite(G2,250);
analogWrite(B2,0);
}
else if(v>51 && v<100){
analogWrite(R2,250);
analogWrite(G2,250);
analogWrite(B2,0);
}
else if(v>101 && v<150){
analogWrite(R2,250);
analogWrite(G2,150);
analogWrite(B2,0);
}
else if(v>151 && v<200){
analogWrite(R2,250);
analogWrite(G2,0);
analogWrite(B2,0);
}
else if(v>201 && v<300){
analogWrite(R2,250);
analogWrite(G2,0);
analogWrite(B2,250);
}
else if(v>301 && v<500){
analogWrite(R2,150);
analogWrite(G2,0);
analogWrite(B2,0);
}
}
}
}
}
} else {
USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
delay(5000);
}