• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Работа с сайтом thingsspeak.com

kkozyrev

New member
Всем доброго.
Скажите а кто уже писал програмку для работы с сайтом www.thingsspeak.com
что то я запутался с передачей данных на него.

Запрос должен выглядеть так:
POST /update HTTP/1.1
Host: api.thingspeak.com
Connection: close
X-THINGSPEAKAPIKEY: (Write API Key)
Content-Type: application/x-www-form-urlencoded
Content-Length: (number of characters in message)

field1=(Field 1 Data)&field2=(Field 2 Data)

а мой скетч никак не передает данные, хотя подключается к серверу
[HASHTAG]#include[/HASHTAG] <ESP8266WiFi.h>

const char* ssid = "********";
const char* password = "************";

const char* host = "api.thingspeak.com";
const char* streamId = "*******************";


void setup() {
Serial.begin(115200);
delay(10);

// We start by connecting to a WiFi network

Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

int temperatura = 0;

void loop() {
delay(1000);
++temperatura;

Serial.print("connecting to ");
Serial.println(host);

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
Serial.println("connected to www.thingsspeak.com -)");
Serial.println("");

// This will send the request to the server
client.print(String("POST /update HTTP/1.1\r\n") +
"Host: " + host + "\r\n" +
"Connection: close\r\n"+
"X-THINGSPEAKAPIKEY:" + streamId + "\r\n" +
"Content-Type: application/x-www-form-urlencoded\r\n\r\n"
"field1="+temperatura\r\n");

и подскажите как вычислить размер переменной temperatura?

спасибо
 

kkozyrev

New member
Доковырял всё сам. Вот работающий скетч. Может кому пригодится ;)

[HASHTAG]#include[/HASHTAG] <ESP8266WiFi.h>

const char* ssid = "kozyrev"; //имя WIFI сети
const char* password = "**********"; // пароль WIFI сети

const char* host = "api.thingspeak.com";
const char* apikey="***********"; // ключик от thingsspeak.com

int zaderjka = 40;


void setup() {
Serial.begin(115200);
delay(100);

// подключаемся к WiFi сети

Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

int temperatura = 0;
long chislo = 0;


void loop() {
delay(zaderjka*1000);
temperatura = random(5,35);
chislo= random(100,300);

Serial.print("connecting to ");
Serial.println(host);

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
Serial.println();
Serial.println();
Serial.println();
return;
}
Serial.println("connected -)");
Serial.println("");
// Создаем URI для запроса
String url = "/update?key=";
url += apikey;
url += "&field1=";
url += temperatura;
url+="&field2=";
url+=chislo;

Serial.print("Requesting URL: ");
Serial.print(host);
Serial.println(url);


// узнаем размер переменной
int a = sizeof(temperatura);
Serial.print("Size of Temperatura=");
Serial.println(a);

// отправляем запрос на сервер
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
client.flush(); // ждем отправки всех данных


// Read all the lines of the reply from server and print them to Serial
while(client.available()){
String line = client.readStringUntil('\r');
//char line = client.read();
Serial.print(line);
}

Serial.println();
Serial.println("closing connection");
Serial.println();
}
 
Сверху Снизу