ENC28J60 и ThingSpeak
- Войдите на сайт для отправки комментариев
Сб, 09/07/2016 - 19:24
Доброго времени.
Есть необходимость агрегации различных данных на сервисе ThingSpeak. Использовал сетевую плату на базе чипа ENC28J60. Библиотека для работы с сервисом - официальная, с сайта.
Сетевая плата работает, из внутренней сети читается простенькая тестовая веб-страничка. Данные на облачный сервис, видимо, не уходят. Где-то на просторах сети встречал публикации о проблемах взаимодействия ENC28J60 и ThingSpeak
У кого-то есть опыт "поженить" указаную парочку?
Вот скетч, с помощью которого пытаюсь передавать данные:
[code] // WEB-сервер с активацией DHT22, BMP180, DS1307, опрос сенсоров каждые 10 сек, //вывод в порт и на веб-страничку //Добавлена работа с индикаторами //Добавлен вывод на ThingSpeak //Первая попытка вывода на ThingSpeak //Декларирование библиотек #include "etherShield.h" //ethernet-shield ENC28J60 #include "ETHER_28J60.h" //ethernet-shield ENC28J60 #include "DHT.h" //Датчик температуры и влажности DHT22 #include <Wire.h> // необходимо для BMP180 #include <Adafruit_BMP085.h> // необходимо для BMP180 #include "RTClib.h" // необходимо для DS1307 #include <ThingSpeak.h> // Библиотека для сервиса ThingSpeak #include <SPI.h> //А надо ли??? #include <Ethernet.h> // //Работа с Ethernet-shield //Присвоекие mac-адреса для ethernet-shield static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // Присвоение IP-адреса для ethernet-shield static uint8_t ip[4] = {192, 168, 0, 150}; // Присвоение номера порта web-серверу для ethernet-shield static uint16_t port = 80; // ETHER_28J60 ethernet; // // Блок DHT22 #define DHTPIN 2 // what digital pin we're connected to #define DHTTYPE DHT22 // Декларирование типа датчика DHT dht(DHTPIN, DHTTYPE); // Инициализация DHT22 // //Регистрационные данные на ThingSpeak unsigned long myChannelNumber = 130871; const char * myWriteAPIKey = "3D8BA0AP3YGODA1S"; // //Работа с часами DS1307 RTC_DS1307 RTC; // // Блок BMP180 Adafruit_BMP085 bmp; // //Объявление переменных float Sens_DHT_Temp; // DHT22 температура float Sens_DHT_Hum; // DHT22 влажность float Sens_BMP_Temp; // BMP180 температура float Sens_BMP_Press; // BMP180 давление int Clock_Min; // Время - минуты int Clock_Sec; // Время - Секунды float Calc_BMP_Temp; // BMP180 температура - градусы Цельсия float Calc_BMP_Press; // BMP180 давление мм.рт.ст. // EthernetClient client; void setup() { ethernet.setup(mac, ip, port); //Включение ethernet-shield dht.begin(); // Включение DHT22 Serial.begin(9600); //Последовательный порт Wire.begin(); //Запуск шины I2C RTC.begin(); //Запуск часов реального времени bmp.begin(); //Запуск BMP180 ThingSpeak.begin(client); //Запуск клиента ThingSpeak pinMode(3, OUTPUT); // Индикация опроса датчиков pinMode(4, OUTPUT); // Индикация отправки данных на ThinsSpeak pinMode(5, OUTPUT); // Индикация отправки web-странички } void loop() { // Определяем время DateTime now = RTC.now(); Clock_Min=now.minute(); Clock_Sec=now.second(); //Формируем условия для опроса датчиков - каждые 10 секунд if (Clock_Sec==0 || Clock_Sec==10 || Clock_Sec==20 || Clock_Sec==30 || Clock_Sec==40 || Clock_Sec==50){ //Включение индикатора опроса digitalWrite(3, HIGH); // //Опрос датчиков Sens_DHT_Temp = dht.readTemperature(); Sens_DHT_Hum = dht.readHumidity(); Sens_BMP_Temp = bmp.readTemperature(); Sens_BMP_Press = bmp.readPressure(); //Вычисление расчетных величин Calc_BMP_Press = Sens_BMP_Press /133,3; // delay(1000); //Выключение индикатора опроса digitalWrite(3, LOW); // //Тестовый вывод величин в консоль /* Serial.print(Clock_Min); Serial.print(':'); Serial.print(Clock_Sec); Serial.println(); Serial.print("DHT_Temp = "); Serial.print(Sens_DHT_Temp); Serial.println(); Serial.print("DHT_Hum = "); Serial.print(Sens_DHT_Hum); Serial.println(); Serial.print("BMP_Temp = "); Serial.print(Sens_BMP_Temp); Serial.println(); Serial.print("Calc_BMP_Press = "); Serial.print(Calc_BMP_Press); Serial.println(); //Serial.print("BMP_Press = "); //Serial.print(Sens_BMP_Press); //Serial.println(); // */ } //Формирование веб-странички по запросу if (ethernet.serviceRequest()) { //Включение индикатора digitalWrite(5, HIGH); // //Блок вывода информации с DHT22 ethernet.print("<H1>Arduino MeteoControl</H1>"); ethernet.print("<H2>DHT22 info</H2>"); ethernet.print("<H3>Humidty</H3>"); ethernet.print(Sens_DHT_Hum); ethernet.print("<H3>Temperature</H3>"); ethernet.print(Sens_DHT_Temp); //Конец блока //Блок вывода информации с BMP180 ethernet.print("<H2>BMP180 info</H2>"); ethernet.print("<H3>BMP180 temp</H3>"); ethernet.print(Sens_BMP_Temp); ethernet.print("<H3>BMP180 press</H3>"); ethernet.print(Calc_BMP_Press); //Конец блока ethernet.respond(); //Выключение индикатора опроса digitalWrite(5, LOW); // } //Формируем условия для отправки данных на ThingSpeak - каждые 5 минут if ((Clock_Min==0 || Clock_Min==5 || Clock_Min==10 || Clock_Min==15 || Clock_Min==20 || Clock_Min==25 || Clock_Min==30 || Clock_Min==35 || Clock_Min==40 || Clock_Min==45 || Clock_Min==50 || Clock_Min==55) && (Clock_Sec=now.second() == 5)){ //Включение индикатора опроса digitalWrite(4, HIGH); // //Формирование блока данных ThingSpeak.setField(1,Sens_DHT_Temp); ThingSpeak.setField(2,Sens_DHT_Hum); ThingSpeak.setField(3,Sens_BMP_Temp); ThingSpeak.setField(4,Sens_BMP_Press); ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); // delay(1000); //Выключение индикатора опроса digitalWrite(4, LOW); // } } [/code]Зачем вы светите реквизиты доступа на запись?
http://www.arduinesp.com/thingspeak
Я его уже по ходу экспериментов перегенерировал 350 раз.
Спасибо. Видел.
Только вот "завести" его по проводу и ENC28J60 пока не получается...
Это что-то дает? Зачем может потребоваться так часто менять ключи?
В инете есть примеры работы с данным сервисом без использования библиотеки. Например https://forum.pjrc.com/threads/25887-Arduino-code-example-for-ENC28J60-Ethernet-upload-to-Thingspeak