Работа с 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