С безпроводного датчика на Народон
- Войдите на сайт для отправки комментариев
Здраствуйте уважаемые форумчани.
Пишу тут впервые и очень надеюсь на помощь в составлении скетча для отправки данных на народмон. Поискав схожие темы на форуме так и не нашел похожую на мою задумку, поэтому решил создять эту.
Проблема в кратце: Метеостанция состоит из двух контроллеров, передающего и принимающего который должен передавать данные на народмон. Общение между платами происходит в одностороннем порядке от наружного модуля с датчиками температуры, влажности и освещения через 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 ="";099replyBuffer +="ID=#DE-AF-BF-0A-00-0A";100replyBuffer +="#T1#";но это происходит уже после того как я получаю
Покопайтесь у MaksMS , там всё прекрасно сделано и работает http://homes-smart.ru/
( Реклама хорошего проекта )