arduino webclient - может кто знает

aleksandr777
Offline
Зарегистрирован: 04.01.2018

Добрый день!

имеется ардуина + w5100, удаленный сервер. может кто нибудь знает как с удаленного сервера отправить данные на арадуину (например кнопка включения реле на php.)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

aleksandr777 пишет:

Добрый день!

имеется ардуина + w5100, удаленный сервер. может кто нибудь знает как с удаленного сервера отправить данные на арадуину (например кнопка включения реле на php.)

Если у ардуины есть белый IP - то с PHP-скрипта на сервере отправить HTTP-запрос на ардуину, на стороне дуньки распарсить запрос и выдать ответ.

Если у ардуины нет белого IP  - периодически с ардуины опрашивать скрипт на сервере, который будет выдавать дуньке команды. Опрашивать - также путём отсыла HTTP-запроса на сервер, но уже с дуньки.

Упоминая HTTP - речь идёт о веб-сервере, т.к. "кнопка включения реле на php".

aleksandr777
Offline
Зарегистрирован: 04.01.2018

 Допустим 1й вариант - "Если у ардуины есть белый IP - то с PHP-скрипта на сервере отправить HTTP-запрос на ардуину, на стороне дуньки распарсить запрос и выдать ответ."

есть прмер такого запроса?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Есть пример, только непонятно, что он вам даст: http://my-arduino-ip/action?relay1=on

aleksandr777
Offline
Зарегистрирован: 04.01.2018

sadman41 пишет:

Есть пример, только непонятно, что он вам даст: http://my-arduino-ip/action?relay1=on

ардуина в этом случае работает как сервер?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ардуина в этом случае работает так, как вы ее запрограммируете.

aleksandr777
Offline
Зарегистрирован: 04.01.2018

Допустим, вот скетч клиента

#include <SimpleDHT.h>
int pinDHT11 = 2;
SimpleDHT11 dht11;
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;

#include <ESP8266WiFi.h>

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

const int httpPort = 80;
const char* host = "192.168.1.35";
byte t = 0;
byte h = 0;
float t1;
float p;
float m;
long previousMillis = 0;
long interval = 120000*5;


void setup() {
  Serial.begin(115200);
  bmp.begin();
  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());
}

void loop() {
 unsigned long currentMillis = millis();
  if (currentMillis - previousMillis > interval) { 
  sendSensor();
  // put your main code here, to run repeatedly:
WiFiClient client;
   if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
String url = "/esp8266.php?";
    url += "id=1"; 
    url += "&t="; 
    url += t;
    url += "&h="; 
    url += h;
    url += "&t1=";
    url += t1;
    url += "&p=";
    url += p;
    url += "&m=";
    url += m;
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");  
  Serial.println(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");  
  previousMillis = currentMillis;
   
    }
   
}
void sendSensor()
{
//byte t = 0;
//byte h = 0;
//float c = 133.3;
dht11.read(pinDHT11, &t, &h, NULL);
Serial.print("Sample OK: ");  
t1 = bmp.readTemperature();
p = bmp.readSealevelPressure();
m = (p/133.3);
//Serial.print(t);
//Serial.print(" ,");
//Serial.println(h);
//Serial.print(t1);
//Serial.print(" ,");
//Serial.print(p);
//Serial.print(" ,");
//Serial.println(m);
}


как мы в там случае можем обработать Ваш запрос?

sadman41
Offline
Зарегистрирован: 19.10.2016

Никак. Во-первых скетч не под w5100, во-вторых - он сам отправляет запрос. Ищите другой.

aleksandr777
Offline
Зарегистрирован: 04.01.2018

sadman41 пишет:

Никак. Во-первых скетч не под w5100, во-вторых - он сам отправляет запрос. Ищите другой.

разницы нет под w5100 или под esp. алгоритм отправки запроса на сервер одинаков. 

второе - мой косяк, забыл упомянуть что  я шлю гет запрос с данными (ардуина клиент) на удаленный сервер

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

aleksandr777 пишет:

sadman41 пишет:

Никак. Во-первых скетч не под w5100, во-вторых - он сам отправляет запрос. Ищите другой.

разницы нет под w5100 или под esp. алгоритм отправки запроса на сервер одинаков. 

второе - мой косяк, забыл упомянуть что  я шлю гет запрос с данными (ардуина клиент) на удаленный сервер

Тогда это вариант номер 2. На стороне сервера отдавайте ардуине ответ с задачами, ардуина их разбирает и понимает, чего от неё попросили. На сервере задачи можно хранить в БД, и выдавать дуньке, как только она их запросит, удалять - по подтверждению выполнения с дуньки.