Нужна помощь в проекте (передача данных на сайт Народный мониторинг)
- Войдите на сайт для отправки комментариев
Всем доброго времени суток!
Предисловие(можно не читать):Возникла недавно непреодолимое желание создать что-нибудь своими руками. Закупил все необходимые компоненты(Arduino,шаговые двигатели,датчик температуры и влажности - DHT21,датчик давления - BMP085,датчик движения и т.п.), опробовал небольшие примеры и решил сделать что нибудь посерьезнее. Долго читал в интернете различные статьи и наткнулся на интересную для себя тему - Отправка данных на сайт "Народный мониторинг".
Суть: Взял скетч(второй) для отправки данных на сайт Народный мониторинг с этого сайта http://star-t-hinking.blogspot.ru/2013/06/diy.html для DHT22,
// // FILE: dht_test.pde // PURPOSE: DHT library test sketch for Arduino // #include <DHT.h> #include <Dhcp.h> #include <Dns.h> #include <Ethernet.h> #include <EthernetClient.h> #include <EthernetServer.h> #include <EthernetUdp.h> #include <util.h> #include <SPI.h> DHT dht; #define DHT21_PIN 7; const unsigned long postingInterval = 600000; // интервал между отправками данных в миллисекундах (10 минут) unsigned long lastConnectionTime = 0; // время последней передачи данных boolean lastConnected = false; // состояние подключения int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract; char replyBuffer[106]; char CurTemp[6]; // ========================Задаем данные сети====================== byte mac[] = { 000, 000, 000, 000, 000, 000 }; //mac - адрес ethernet shielda ставим свой // byte ip[] = { 000, 000, 000, 000 }; // ip адрес ethernet shielda // byte subnet[] = { 255, 255, 255, 0 }; //маска подсети // EthernetServer server(80); //порт сервера EthernetClient client; // int ledPin = 9; // указываем что светодиод будет управляться через 9 Pin String readString = String(30); //string for fetching data from address boolean LEDON = false; //изначальный статус светодиода - выключен IPAddress server(94,19,113,221); // IP сервера // =============================================================== void setup() { delay(4000); // Ethernet connection: if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); // ничего не делаем for(;;) ; } // секунда для инициализации Ethernet delay(2000); lastConnectionTime = millis()-postingInterval+15000; //первое соединение через 15 секунд после запуска //устанавливаем pin 9 на выход pinMode(ledPin, OUTPUT); Serial.begin(115200); Serial.println("DHT TEST PROGRAM "); Serial.print("LIBRARY VERSION: "); Serial.println("DHT_LIB_VERSION"); Serial.println(); Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)"); } void loop() { // READ DATA Serial.print("DHT21, \t"); int chk = dht.read22(DHT21_PIN); switch (chk) { case DHTLIB_OK: Serial.print("OK,\t"); break; case DHTLIB_ERROR_CHECKSUM: Serial.print("Checksum error,\t"); break; case DHTLIB_ERROR_TIMEOUT: Serial.print("Time out error,\t"); break; default: Serial.print("Unknown error,\t"); break; } // DISPLAY DATA Serial.print(DHT.humidity, 1); Serial.print(",\t"); Serial.println(DHT.temperature, 1); delay(50000); if (client.available()) { char c = client.read(); } if (!client.connected() && lastConnected) { client.stop(); } if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) { //отправляем запрос int t = DHT.temperature; int h= DHT.humidity; char temp[3]; char hum[2]; //формирование HTTP-запроса memset(replyBuffer, 0, sizeof(replyBuffer)); strcpy(replyBuffer,"ID="); //Конвертируем MAC-адрес for (int k=0; k<6; k++) { int b1=mac[k]/16; int b2=mac[k]%16; char c1[2],c2[2]; if (b1>9) c1[0]=(char)(b1-10)+'A'; else c1[0] = (char)(b1) + '0'; if (b2>9) c2[0]=(char)(b2-10)+'A'; else c2[0] = (char)(b2) + '0'; c1[1]='\0'; c2[1]='\0'; strcat(replyBuffer,c1); strcat(replyBuffer,c2); } //конвертируем адрес термодатчика strcat(replyBuffer,"&"); for (int k=0; k<6; k++) { int b1=mac[k]/16; int b2=mac[k]%16; char c1[2],c2[2]; if (b1>9) c1[0]=(char)(b1-10)+'A'; else c1[0] = (char)(b1) + '0'; if (b2>9) c2[0]=(char)(b2-10)+'A'; else c2[0] = (char)(b2) + '0'; c1[1]='\0'; c2[1]='\0'; strcat(replyBuffer,c1); strcat(replyBuffer,c2); } strcat(replyBuffer,"01"); //конвертируем адрес датчика влажности strcat(replyBuffer,"="); if (SignBit) { strcat(replyBuffer,"-"); } itos(t,temp); strcat(replyBuffer,temp); strcat(replyBuffer,"."); strcat(replyBuffer,"&"); for (int k=0; k<6; k++) { int b1=mac[k]/16; int b2=mac[k]%16; char c1[2],c2[2]; if (b1>9) c1[0]=(char)(b1-10)+'A'; else c1[0] = (char)(b1) + '0'; if (b2>9) c2[0]=(char)(b2-10)+'A'; else c2[0] = (char)(b2) + '0'; c1[1]='\0'; c2[1]='\0'; strcat(replyBuffer,c1); strcat(replyBuffer,c2); } strcat(replyBuffer,"02"); strcat(replyBuffer,"="); itos(h,hum); strcat(replyBuffer,hum); strcat(replyBuffer,"."); strcat(CurTemp,temp); httpRequest(); } lastConnected = client.connected(); } void httpRequest() { if (client.connect(server, 80)) { // send the HTTP POST request: client.println("POST http://narodmon.ru/post.php HTTP/1.0"); Serial.println("POST http://narodmon.ru/post.php HTTP/1.0"); client.println("Host: narodmon.ru"); Serial.println("Host: narodmon.ru"); //client.println("User-Agent: arduino-ethernet"); //client.println("Connection: close"); client.println("Content-Type: application/x-www-form-urlencoded"); Serial.println("Content-Type: application/x-www-form-urlencoded"); client.println("Content-Length: 53"); Serial.println("Content-Length: 53"); client.println(); Serial.println(); client.println(replyBuffer); Serial.println(replyBuffer); client.println(); lastConnectionTime = millis(); delay(1000); } else { client.stop(); } } void itos(int n, char bufp[3]) //int to string { char buf[3]={'0','0','\0'}; int i = 1; while (n > 0) { buf[i] = (n % 10)+48; i--; n /= 10; } for (i=0; i<3; i++) bufp[i]=buf[i]; } // // END OF FILE //
дописал с горем пополам библиотеку DHT для своего датчика DHT21, начал компиляцию скетча и тут меня дуня огорчила ошибкой в строке 65 следующим текстом "'class DHT' has no member named 'read22'".
Снова полез в библиотеку DHT и действительно нет никакого read22. Пробовал различные варианты того что автор сие скетча хотел прокоментировать в этой строке но ничего не получилось.
Уважаемые форумчане!Огромная просьба помогите кто может разобраться в этом коде. Дать подсказки, советы.Буду очень признателен.
ЗЫ: Есть большое желание довести все таки все это до ума. (Пробовал такой вариант
int chk = dht.readSensor(DHT21_PIN);
но появилась следующая ошибка "expected `)' before ';' token")
Уважаемый DZent - я был неправ и в скетче были ошибки. Правда компилировалось все нормально, но результаты выдавались только после включения. Дальше до перезагрузки результаты измерений не менялись. Скетч исправил и выложил обратно на https://www.blog.itdoca.com/diy-dht/
Библиотеку для нормальной работы сенсора в цифровом режиме брал с URL: http://playground.arduino.cc/Main/DHTLib
Не уверен, но для работы с DHT21 вроде и править ничего не нужно, должно подойти все от DHT22, в крайнем случае от DHT11.