Страница 1 из 2

Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 10:41 am
Andrei
Добрый день! Нашел тему http://smartliving.ru/forum/viewtopic.p ... 2&start=10 про подключение датчика DHT11 к Ардуино и записью его показаний в MySQL решил попробовать повторить, но вот беда - не получилось. поэтому обращаюсь с просьбой помочь "Новичку".
Попробую объяснить где застрял: Датчик подключил, скетч залил, в мониторе порта получил строку следующего вида: GET /dhts.php?h=48&t=24 далее куча вопросов: Что такое IP адрес сервера который будет собирать статистику, где его взять (в сетях не разбераюсь)? На компе стоит Apache, php и MySQL. Далее в папке www создал папку с именем dht, через браузер захожу в нее так: localhost/dht В этой папке лежит файл dhts.php следующего содержания:

Код: Выделить всё

<?php

if (isset($_GET['t'])) {$thermometerid=$_GET['t'];}
if (isset($_GET['h'])) {$value=$_GET['h'];}

if (!isset($thermometerid) && !isset($value))
{
echo "Переменные не существуют";
}
echo $thermometerid;
echo $value;
?>
Когда его запускаю localhost/dht/dhts.php то получаю строку "Переменные не существуют".
Вот не могу понять, GET запрос формируется, как видно в мониторе портов, но в php файл не передается.
Помогите пожалуйста разобраться
Скетч:

Код: Выделить всё

#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>
#include <string.h>
#include <Wire.h>

//************************************************************
byte mac[] = { 0x50, 0xA2, 0xDA, 0x00, 0x5C, 0xFB };
byte ip[] = { 192, 168, 0, 103 };

//IP адрес сервера который будет собирать статистику
byte server[] = { 192, 168, 0, 7 };
char buffer[256];
    //EthernetClient client;
Client client(server, 80); // для компиллятра arduino 0023


//************************ DHT22 ****************************

//Контакт к которому подключен датчик температуры и влажности
#define  DHTPIN 13 

// Вы бираем сенсор который используется у вас, у меня DHT 22
#define DHTTYPE DHT11   // для DHT 11 
//#define DHTTYPE DHT22   // для DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);
int volt=12;

//***********************************************************


void setup()
{    
  Ethernet.begin(mac, ip);
   Serial.begin(9600);
   pinMode(volt, OUTPUT);
   digitalWrite(volt, HIGH);
   
  dht.begin();
  Wire.begin();
  bmp085Calibration();
  delay(1000);
 }

void loop()
{
//************************ DHT22 ****************************
int h = dht.readHumidity();
int t = dht.readTemperature();
//***********************************************************

Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");

String msg = "GET /dhts.php?h="+ String(h) + "&t="+String(t);

// Для отладки включим отправку данных в COM порт
Serial.println(msg);
 
EthernetClient connect();
client.println(msg);
client.stop();

//Данные будут отправляться каждые 5 минут.
 delay (300000);
 
}

Re: Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 1:25 pm
LutsenkoDenis
Далее в папке www создал папку с именем dht, через браузер захожу в нее так: localhost/dht В этой папке лежит файл dhts.php следующего содержания
1. Если файл лежит в папке wwww/dht, то и путь в ардуино должен быть /dht/dhts.php?h=48&t=24
2. Ip адрес сервера - это ip адрес сервера :) в данном случае имхо это сервер на котором установлен majordomo.
3. В скетче еще перед выводом в ком порт поставить проверку что порт доступен. А то скетч так и будет ждать появления ком-порта и не отправит данные на сервер. :)

Ну а так, проверить можно достаточно легко.
Достаточно зайти браузером по адресу и посмотреть работает или нет. Если работает, то сверить чтоб адрес совпадал с тем что создается в ардуино.

Re: Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 8:50 pm
Andrei
Согласно рекомендациям LutsenkoDenis внес исправления, но всеравно не работает.
Исправил пункт 1.
Относительно п.2, т.к. у меня стоит Apache его IP 127.0.0.1, поэтому IP адрес сервера в скетче написал 127.0.0.1 (прошу поправить, если неправильно).
Добавил проверку как описывалось в п.3
В итоге вот что получилось:

Код: Выделить всё

#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>
#include <string.h>
#include <Wire.h>

//************************************************************

byte mac[] = { 0x50, 0xA2, 0xDA, 0x00, 0x5C, 0xFB };
byte ip[] = { 192, 168, 0, 103 };
//IP адрес сервера который будет собирать статистику
byte server[] = { 127, 0, 0, 1 };
char buffer[256];
EthernetClient client;

//************************ DHT22 ****************************

//Контакт к которому подключен датчик температуры и влажности
#define  DHTPIN 13 
#define DHTTYPE DHT11   // для DHT 11
DHT dht(DHTPIN, DHTTYPE);
int volt=12;

//***********************************************************

void setup()
{    
  Ethernet.begin(mac, ip);
   Serial.begin(9600);
   pinMode(volt, OUTPUT);
   digitalWrite(volt, HIGH);
   
  dht.begin();
  delay(1000);
 }

void loop()
{

//************************ DHT22 ****************************
int h = dht.readHumidity();
int t = dht.readTemperature();
//***********************************************************

Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(t);
    Serial.println(" *C");

String msg = "GET dht/dhts.php?h="+ String(h) + "&t="+String(t);

// Для отладки включим отправку данных в COM порт
Serial.println(msg);
    
EthernetClient connect();
if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println(msg);
    client.println();
  } else {
    Serial.println("connection failed");
  }

rclient.stop();

//Данные будут отправляться каждые 5сек.
 delay (5000);
 
}
 
И в мониторе портов я вижу текст "connection failed"
Помогите разобраться, что я делаю не так?

Re: Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 9:25 pm
krasnov
Andrei писал(а):Относительно п.2, т.к. у меня стоит Apache его IP 127.0.0.1, поэтому IP адрес сервера в скетче написал 127.0.0.1 (прошу поправить, если неправильно).
Думаю в адрес сервера надо прописать айпи компьютера в сети где стоит апач. На той машине запустите ifconfig, если линукс, либо ipconfig если винда. В выводе команды найдите айпишник. Обычно идет подобный 192.168.*.* (вместо звездочек цифры).

127.0.0.1 это текущий комп. С любого компа будет обращаться сам к себе.

Re: Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 9:48 pm
LutsenkoDenis
поддерживаю предыдущего оратора :)

я бы еще в настройках роутера, если он есть конечно, задал бы компу на котором будет мажордом статический ip. ну, чтоб при очередной перезагрузке ip не подхватил какой-нибудь еще комп из локальной сети.

ну и еще можно посмотреть пример передачи параметров на сервер вот тут http://smartliving.ru/Main/OregonTHN132N.

Re: Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 9:57 pm
Andrei
По команде ipconfig получил:
Ipv4 192168.0.100
Маска 255.255.255.0
Основной шлюз 192.168.0.1 (это роутер)
Такие настройки у меня забиты в свойствах сетевой.
Задал IP сервера 192.168.0.100 но ничего не изменилось, строка "connection failed" в мониторе порта не пропала

Re: Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 10:08 pm
Andrei
LutsenkoDenis писал(а):поддерживаю предыдущего оратора :)

я бы еще в настройках роутера, если он есть конечно, задал бы компу на котором будет мажордом статический ip. ну, чтоб при очередной перезагрузке ip не подхватил какой-нибудь еще комп из локальной сети.

ну и еще можно посмотреть пример передачи параметров на сервер вот тут http://smartliving.ru/Main/OregonTHN132N.
Посмотрел, но для меня это пока слишком сложно, я не могу разобраться

Re: Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 10:53 pm
LutsenkoDenis
убери EthernetClient connect();

Re: Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 11:04 pm
Andrei
LutsenkoDenis писал(а):убери EthernetClient connect();
Убрал - ничего не изменилось

Re: Нужна помощь новичку по датчику DHT11

Добавлено: Вт мар 25, 2014 11:24 pm
LutsenkoDenis
а так?

Код: Выделить всё

#include <DHT.h>
#include <Ethernet.h>
#include <SPI.h>
#include <string.h>
#include <Wire.h>

//************************************************************

byte mac[] = { 0x50, 0xA2, 0xDA, 0x00, 0x5C, 0xFB };        // Arduino Mac
IPAddress ip = { 192, 168, 0, 103 };                        // Arduino IP
IPAddress server = { 192, 168, 0, 100 };                    // MajorDoMo IP

char buffer[256];
EthernetClient client;
boolean lastConnected = false;                             // state of the connection last time through the main loop

//************************ DHT22 ****************************

//Контакт к которому подключен датчик температуры и влажности
#define  DHTPIN 13 
#define DHTTYPE DHT11   // для DHT 11
DHT dht(DHTPIN, DHTTYPE);
int volt=12;

//***********************************************************

void setup()
{    
   Serial.begin(9600);
   
   pinMode(volt, OUTPUT);
   digitalWrite(volt, HIGH);
   
   dht.begin();
   delay(1000);

   // start the Ethernet connection:
   if (Ethernet.begin(mac) == 0) 
   {
      if (Serial.available())
         Serial.println("Failed to configure Ethernet using DHCP");
      
      // no point in carrying on, so do nothing forevermore:
      // try to congifure using IP address instead of DHCP:
      Ethernet.begin(mac, ip);
   }
   // give the Ethernet shield a two second to initialize:
   delay(2000);
}

void PostData(String data)
{
   if (client.connected()) client.stop(); 

   if (client.connect(server, 80))
   {
      if (Serial.available())
         Serial.println(F("connected"));

      client.println(data);
      client.println();
   }
   else
   {
      if (Serial.available())
         Serial.println(F("connection failed"));
   }

   // if there's no net connection, but there was one last time
   // through the loop, then stop the client:
   if (!client.connected() && lastConnected) 
   {
      if (Serial.available())
      {
         Serial.println();
         Serial.println("disconnecting.");
      }

      client.stop();
   }

   lastConnected = client.connected();
}

void loop()
{

   //************************ DHT22 ****************************
   int h = dht.readHumidity();
   int t = dht.readTemperature();
   //***********************************************************

   if (Serial.available())
   {
      Serial.print("Humidity: "); 
      Serial.print(h);
      Serial.print(" %\t");
      Serial.print("Temperature: "); 
      Serial.print(t);
      Serial.println(" *C");
   }

   String msg = "GET dht/dhts.php?h="+ String(h) + "&t="+String(t);

   // Для отладки включим отправку данных в COM порт
   if (Serial.available())
      Serial.println(msg);
   
   // пытаемся отправить данные
   PostData(msg);


   //Данные будут отправляться каждые 5сек.
   delay (5000);
}