SparkFun ESP8266 Thing: подключение к WiFi и выполнение POST-запроса с JSON

Привожу тут пример кода для SparkFun ESP8266 The Thing, который подключается к WiFi и выполняет POST-запрос к указанному серверу. (Про то, как подключить эту плату к компьютеру и прошить я писал здесь). В качестве сервера я использовал NodeJS сервер, который я описывал здесь (этим и объясняется содержание JSON в запросе). Собственно, плата подключается к WiFi и раз в 30 секунд через POST отправляет серверу вот такой JSON:
{
    "var1": "1",
    "var2": "0"
}
А вот и сам код:
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

const int LED_PIN = 5; // Thing's onboard, green LED

const char WiFiSSID[] = "Имя WiFi сети";
const char WiFiPSK[] = "пароль";

const char HttpServer[] = "адрес сервера";
const int HttpPort = 8080;

const unsigned long postRate = 30000;
unsigned long lastPost = 0;

void initHardware()
{
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  
  //Uncomment to use Serial monitor
  //while(!Serial.available());
}

int postToServer()
{
  //Turn LED on
  digitalWrite(LED_PIN, HIGH);
  
  Serial.println("Sending...");
  
  HTTPClient http;
  http.begin(HttpServer, HttpPort);
  http.addHeader("Content-Type", "application/json");
  
  int httpCode = http.POST("{\"var1\":\"1\",\"var2\":\"0\"}");

  int ret = 1;

  if(httpCode > 0) 
  {
    Serial.printf("Http code = %d\n", httpCode);
    
  } 
  else 
  {
    Serial.printf("Sending failed, error: %s\n", http.errorToString(httpCode).c_str());
    ret = 0;
  }

  http.end();

  //Turn LED off
  digitalWrite(LED_PIN, LOW);
  
  return ret; 
}

void connectWiFi()
{
  byte ledStatus = LOW;

  // Set WiFi mode to station (as opposed to AP or AP_STA)
  WiFi.mode(WIFI_STA);

  Serial.println("Connecting");
  
  WiFi.begin(WiFiSSID, WiFiPSK);
  
  while (WiFi.status() != WL_CONNECTED)
  {
    // Blink the LED
    digitalWrite(LED_PIN, ledStatus); // Write LED high/low
    ledStatus = (ledStatus == HIGH) ? LOW : HIGH;
    
    yield();
  }

  Serial.println("Connected");
}

void setup() 
{
  initHardware();
  connectWiFi();
  digitalWrite(LED_PIN, HIGH);
}

void loop() 
{
  if (lastPost + postRate <= millis())
  {
    if (postToServer())
      lastPost = millis();
    else
      yield();    
  }
}

Комментариев нет :

Отправить комментарий