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

Привожу тут пример кода для SparkFun ESP8266 The Thing, который подключается к WiFi и выполняет POST-запрос к указанному серверу. (Про то, как подключить эту плату к компьютеру и прошить я писал здесь). В качестве сервера я использовал NodeJS сервер, который я описывал здесь (этим и объясняется содержание JSON в запросе). Собственно, плата подключается к WiFi и раз в 30 секунд через POST отправляет серверу вот такой JSON:
1
2
3
4
{
    "var1": "1",
    "var2": "0"
}
А вот и сам код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#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();   
  }
}

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

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