С безпроводного датчика на Народон
- Войдите на сайт для отправки комментариев
Здраствуйте уважаемые форумчани.
Пишу тут впервые и очень надеюсь на помощь в составлении скетча для отправки данных на народмон. Поискав схожие темы на форуме так и не нашел похожую на мою задумку, поэтому решил создять эту.
Проблема в кратце: Метеостанция состоит из двух контроллеров, передающего и принимающего который должен передавать данные на народмон. Общение между платами происходит в одностороннем порядке от наружного модуля с датчиками температуры, влажности и освещения через 433мгз дешевый передатчик работающий с библиотекой virtual whire. Задaча принимающей стороны, которая состоит из платы ардуино уно, ethernet shield и 433mhz приемника, это по приходу данных с "наружного блока" отправлять эти данные на сайт народмониторинга. Триггером для отправки должны служить собственно прием данных с безпроводного блока(в котором я указываю переодичность отправки данных по радио) поэтому никаких делэй и таймеров в нем не устанавливаю. С железом разобрался, осталась проблема в скетче с отправкой данных на народмон, тоесть последняя стандия. по дебагу вижу что ардуино во время http request не может подсоединиться к серверу сайта, и соответственно ничего туда не отправлет.
Скетч стараюсь составить как можно простым:
#include <VirtualWire.h> #include <SPI.h> #include <Ethernet.h> bool Debug = false; //режим отладки int temp=0; int hum=0; int lux=0; char MsgReceived[21]; char replyBuffer[160]; boolean lastConnected = false; //**********Internet connection settings************* byte mac[] = { 0xDE, 0xAF, 0xBF, 0x0F, 0x0F, 0x0F }; IPAddress server(94,19,113,221); EthernetClient client; char tempsend[10]; char humsend[10]; char luxsend[10]; //********End settings*********** void setup() { delay(3000); Serial.begin(9600); Serial.println("initializing Ethernet"); // Ethernet connection: delay(3000); if (Ethernet.begin(mac) == 0) { if (Debug) { Serial.println("Failed to configure Ethernet using DHCP"); } // ничего не делаем for(;;); } // секунда для инициализации Ethernet delay(2000); Serial.print("initializing Complete!"); //VirtualWire Setup vw_setup(2000); vw_set_rx_pin(2); vw_rx_start(); Serial.println("radio online"); // delay(1000); } void loop() { //Если вдруг нам случайно приходят откуда-то какие-то данные, //то просто читаем их и игнорируем, чтобы очистить буфер if (client.available()) { client.read(); } uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen = VW_MAX_MESSAGE_LEN; //Taking the data from the control base if (vw_get_message(buf, &buflen)) { //digitalWrite(led, HIGH); int i; // Message with a good checksum received, dump it. for (i = 0; i < buflen; i++) { // Fill Msg Char array with corresponding // chars from buffer. MsgReceived[i] = char(buf[i]); //Serial.print(MsgReceived[i]); } sscanf(MsgReceived, "%d,%d,%d",&temp, &hum,&lux); // Converts a string to an array //digitalWrite(led, LOW); Serial.print("Temp: "); Serial.print(temp); Serial.print("Humid: "); Serial.print(hum); Serial.print("Light: "); Serial.println(lux); Serial.println(MsgReceived[i]); sprintf(tempsend, "%d",temp); String replyBuffer = ""; replyBuffer += "ID=#DE-AF-BF-0A-00-0A"; replyBuffer += "#T1#"; httpRequest(); //debug dlya otpravki dannyh //end debug Serial.print("this is string:"); Serial.println(replyBuffer); } //if(tempsend[0] == '\0') {} //else{ // Serial.println("attempt http reuest"); // } //храним последнее состояние подключения // lastConnected = client.connected(); } void httpRequest() { Serial.println("connecting"); delay(1000); // Отправка данных на сервер порт 8283 по следующему алгоритму: if (client.connect(server, 8283)) { Serial.println("connected!!!"); // send the HTTP POST request: client.println("POST http://narodmon.ru/post.php HTTP/1.0"); client.println("Host: narodmon.ru"); //client.println("User-Agent: arduino-ethernet"); //client.println("Connection: close"); client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.println(replyBuffer); client.println(); client.stop(); Serial.println("SENT!"); } else { Serial.println("connection failed"); Serial.println("disconnecting."); client.stop(); } memset( MsgReceived, 0, sizeof(MsgReceived));// This line is for reset the StringReceived memset( tempsend, 0, sizeof(tempsend)); memset( humsend, 0, sizeof(humsend)); memset( luxsend, 0, sizeof(luxsend)); }
Пожалуйста подскажите что в скетче мешает отправки, так как дело доходит до самого httprequest, но на нем и тормозит. на состовляющюю запроса не обращайте внимание, мне бы хотябы чтото сперва отправить :)
В программировании не силен, так что н епинайте сильно :)
Заранее благодарен
ПСы. с 80 портом тоже пробовал. ни как не хочет отправлятж данные
безнадежно? :D
безнадежно? :D
Почему, что в сериал порт выдает строка 109
то что я составил в буфере:
String replyBuffer =
""
;
099
replyBuffer +=
"ID=#DE-AF-BF-0A-00-0A"
;
100
replyBuffer +=
"#T1#"
;
но это происходит уже после того как я получаю
Покопайтесь у MaksMS , там всё прекрасно сделано и работает http://homes-smart.ru/
( Реклама хорошего проекта )