С безпроводного датчика на Народон

bobcat
Offline
Зарегистрирован: 29.04.2015

Здраствуйте уважаемые форумчани. 

Пишу тут впервые и очень надеюсь на помощь в составлении скетча для отправки данных на народмон. Поискав схожие темы на форуме так и не нашел похожую на мою задумку, поэтому решил создять эту.

Проблема в кратце: Метеостанция состоит из двух контроллеров, передающего и принимающего который должен передавать данные на народмон. Общение между платами происходит в одностороннем порядке от наружного модуля с датчиками температуры, влажности и освещения через 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, но на нем и тормозит. на состовляющюю запроса не обращайте внимание, мне бы хотябы чтото сперва отправить :)

В программировании не силен, так что н епинайте сильно :)

Заранее благодарен

bobcat
Offline
Зарегистрирован: 29.04.2015

ПСы. с 80 портом тоже пробовал. ни как не хочет отправлятж данные

bobcat
Offline
Зарегистрирован: 29.04.2015

безнадежно? :D

wer590
Offline
Зарегистрирован: 14.04.2014

bobcat пишет:

безнадежно? :D

Почему, что в сериал порт выдает строка 109

bobcat
Offline
Зарегистрирован: 29.04.2015

то что я составил в буфере:

String replyBuffer = "";
099    replyBuffer += "ID=#DE-AF-BF-0A-00-0A";
100    replyBuffer += "#T1#";

но это происходит уже после того как я получаю 

   Serial.println("connection failed");
      Serial.println("disconnecting.");
    
из void httpRequest, в котором не проходит подсоединение
trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Покопайтесь у MaksMS , там всё прекрасно сделано и работает http://homes-smart.ru/
(  Реклама хорошего проекта )