Работа с Ethernet
- Войдите на сайт для отправки комментариев
Всем привет. :) Я новичек в Ардуино, играю с ней 4-й день. :) Появилась проблема, с которой не могу справиться сам.
У меня Ethernet модуль ENC28J60, для работы с ним я использую библиотеку UIPEthernet. Её работа идентична стандартной библиотеке Ethernet. Все стандартные скетчи для Ehernet работают, если заменить <Ethernet.h> на <UIPEthernet.h>.
Я хочу сделать, что-бы Ардуино отправляла на сервер данные с датчиков, а с сервера забирала настройки. Проблема в том, что по отдельности отправка данных и забор настроек работают (в разных скетчах). А в одном сделать у меня это не получается. Я уже несколько десятков раз перечитал весь код от начала до конца и не вижу где кроется проблема.
Помогите пожалуйста найти где я ошибся. Привожу код моего скетча:
#include <UIPEthernet.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(192,168,1,1); // Server IP
IPAddress ip(192,168,1,2); // Arduino IP
DHT dht(DHTPIN, DHTTYPE); // Init of DHT22
EthernetClient client;
String data;
void setup() {
Serial.begin(57600);
Serial.println("[Web Client]");
dht.begin();
Ethernet.begin(mac, ip);
delay(1000);
}
void loop(){
get_sensors();
}
int get_sensors() {
delay(2000); // Wait a few seconds between measurements.
float h = dht.readHumidity();
float t = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
get_sensors();
}
data = String("temp=") + t + String("&hum=") + h;
connection();
}
int connection() {
client.stop();
if (client.connect(server, 80)) {
Serial.println("connected");
post_data();
get_settings();
Serial.println();
} else {
Serial.println("connection failed");
connection();
}
}
int post_data() {
Serial.println("Posting data");
client.println("POST /save_data.php HTTP/1.1");
client.println("Host: 192.168.1.1");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(data.length());
client.println();
client.println(data);
client.println("Connection: close");
client.println();
Serial.println("Data sended.");
}
int get_settings() {
Serial.println("Getting Settings");
client.println("GET /get_settings.php?device=arduino HTTP/1.1");
client.println("Host: 192.168.1.1");
client.println("Connection: close");
client.println();
responce();
}
int responce() {
Serial.println("Waiting responce...");
if (client.connected()) {
if (client.available()) {
Serial.println(client.available());
char c = client.read();
Serial.print(c);
Serial.println();
return true;
}
responce();
}
}
Если вы подскажете как я могу оптимизировать мой код, буду крайне признателен! :)
На чем у вас сервер развернут?
На данный момент для тестирования использую сервер на своем ноуте. ( Windows, OpenServer ).
В рабочей системе планирую использовать хостинг. Для того что бы панель управления была доступна не зависимо от доступности самой Ардуино, так как на даче (где будет размещена система) у меня не самый стабильный интернет.
P.S.: попробовал обернуть каждый из запросов в отдельное подключение, с последующим дисконнектом. Вроде заработало. Но при попытке получить данные с сервера, приходит одна буква "H".
Возможно я что-то не так делаю? В каком формате лучше что-бы серевер отдавал данные Ардуино Json? Xml? А если всего 2 переменных нужно передать?
Мне тяжело советовать для ENC28J60. Я забыл о ней, и вам советую.
Мне тяжело советовать для ENC28J60. Я забыл о ней, и вам советую.
а чтож вместо нее можно использовать на платформе ардуино?
у меня этим занимается ESP8266 по wi-fi подключается к инету и отправляет на сервер строку, так же можно ответ очень просто вернуть(мне пока не надо) а на чем ответ будете писать это не важно, я юы сделал на php, мне проще
а самый прикол что я перепрошил ESP и ардуинка отправляет только строку которую надо послать на север. и больше отправкой не занимается
работает без сбоев, переподключается к инету если отвалилась связь
можно пример привести, схему-скетч?
можно в другой теме.. спасибо.
тут можно посмотреть http://arduino.ru/forum/apparatnye-voprosy/polzuet-li-kto-wifi-moduli-esp8266-podelites-vpechatleniyami