ENC28J60 и ThingSpeak

Кот Баюн
Offline
Зарегистрирован: 05.06.2016

Доброго времени.

Есть необходимость агрегации различных данных на сервисе ThingSpeak. Использовал сетевую плату на базе чипа ENC28J60. Библиотека для работы с сервисом - официальная, с сайта.
Сетевая плата работает, из внутренней сети читается простенькая тестовая веб-страничка. Данные на облачный сервис, видимо, не уходят. Где-то на просторах сети встречал публикации о проблемах взаимодействия ENC28J60 и ThingSpeak

У кого-то есть опыт "поженить" указаную парочку?

Кот Баюн
Offline
Зарегистрирован: 05.06.2016

Вот скетч, с помощью которого пытаюсь передавать данные:

[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]

 

a5021
Offline
Зарегистрирован: 07.07.2013

Зачем вы светите реквизиты доступа на запись?

MacSim
Offline
Зарегистрирован: 28.11.2012
Кот Баюн
Offline
Зарегистрирован: 05.06.2016

Я его уже по ходу экспериментов перегенерировал 350 раз.

 

Кот Баюн
Offline
Зарегистрирован: 05.06.2016

Спасибо. Видел.

Только вот "завести" его по проводу и ENC28J60 пока не получается...

 

a5021
Offline
Зарегистрирован: 07.07.2013

Кот Баюн пишет:
Я его уже по ходу экспериментов перегенерировал 350 раз.

Это что-то дает? Зачем может потребоваться так часто менять ключи?

alexvs
Offline
Зарегистрирован: 22.07.2014

В инете есть примеры работы с данным сервисом без использования библиотеки. Например https://forum.pjrc.com/threads/25887-Arduino-code-example-for-ENC28J60-Ethernet-upload-to-Thingspeak