• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Мониторинг устройств с помощью сервиса ThingSpeak и Arduino

15 февраля, 2017

Для этой статьи нам понадобится:

Arduino Uno: http://ali.ski/gC_mOa или  Arduino nano: http://ali.ski/rHRbY

Ethernet shield: http://ali.ski/tLocoy

Датчик температуры LM335: http://ali.pub/pr1cx

Фоторезистор: http://ali.ski/5GDvP7

Контактные провода: http://ali.ski/Exjr3

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

Сначала рассмотрим датчик LM335. Это датчик температурного чувствительного элемента с диапазоном от -40 до +100 градусов по Цельсию с точностью в 1 градус.

По принципу действия датчик LM335 представляет собой стабилитрон, у которого напряжение стабилизации зависит от температуры, при повышении температуры на один градус Кельвина напряжение стабилизации увеличивается на 10 милливольт.

Скетч и схему для этого датчика смотрите по ссылке.

Чтение данных с фоторезистора

Рассмотрим аналоговый датчик – фоторезистор. Чаще всего с помощью фоторезисторов осуществляют измерение освещенности. Дело в том, что  в темноте сопротивление фоторезистора весьма велико, но когда на него попадает свет, это сопротивление падает пропорционально освещенности.

Схема подключения фоторезистора к Ардуино:

Для схемы измерения освещенности необходимо собрать делитель напряжения, в котором верхнее плечо будет представлено фоторезистором, а нижнее обычным резистором 10 кОм. среднее же плечо делителя подключается к аналоговому входу А0 Ардуино.

Скетч
int light;
void setup(){
serial.begin(9600);
}
void loop(){
light = analogRead(0);
Serial.println(light);
delay(100);
}

Отправка данных в сервис ThingSpeak.

Сервис ThingSpeak – открытая платформа данных для проектов Internet of Things, включающая в себя сбор данных с датчиков в реальном времени, обработку этих данных, их визуализацию и использование в приложениях и плагинах.

Чтобы начать работу с сервисом, необходимо зарегистрироваться, нажав кнопку GetStarted Now в стартовом окне сервиса. В открывшимся окне регистрации заполняем требуемые формы, нажимаем кнопку Create Account и сразу попадаем в свой аккаунт.

Здесь нам надо создать канал (Channel), в котором будут храниться наши данные.

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

Для создания канала нажимаем кнопку NewChannel, заполняем поля, как показано на рисунки ниже и сохраняем канал, нажав на кнопку Save Channel. Все – канал создан. Мы в качестве датчика задействовали в создаваемом канале фоторезистор, прописав его в поле Field 1. А в Field 2 мы пропишем датчик температуры LM335.

Схема подключения Фоторезистора и датчика LM335 к Ардуино:


Скетч

#include <SPI.h>
#include <Ethernet.h>

// уникальный MAC-адрес платы Arduino
byte mac[] = { 0xD5, 0x28, 0xB2, 0xFF, 0xA1, 0xA1 }; 

// IP адрес, назначаемый Ethernet shield:
byte ip[] = { 192, 168, 1, 11 };    
// IP адрес, dns сервера:
byte sdns[] = { 8, 8, 8, 8 };    
// адрес шлюза:
byte gateway[] = { 192, 168, 1, 111 };
// маска:
byte subnet[] = { 255, 255, 255, 0 };
 
// ThingSpeak Settings
char thingSpeakAddress[] = "api.thingspeak.com";
String writeAPIKey = "H3P7EX4C1I4G33ON";
// Интервал отправки данных на сервер – 16 сек
const int updateThingSpeakInterval = 16 * 1000;      

// служебные переменные
long lastConnectionTime = 0; 
boolean lastConnected = false;
int failedCounter = 0;

// Инициализация Arduino Ethernet client
EthernetClient client;

void setup()
  {
  // Запуск последовательного порта
  Serial.begin(9600);
  // Запуск Ethernet на Arduino
  startEthernet();
  }

void loop()
  {
  // Чтение данных из A0 и A1
  String analogValue0 = String(analogRead(A0), DEC);
  double temp335=analogRead(A1)*5.0/1024*100-273.15;
  String analogValue1 = String(temp335);
  // печать запроса в последовательный порт
  if (client.available())
    {
    char c = client.read();
    Serial.print(c);
    }

  // Разъединение с ThingSpeak
  if (!client.connected() && lastConnected)
    {
    Serial.println("...disconnected");
    Serial.println();
    client.stop();
    }
  
  // отправка данных в Канал ThingSpeak
  if(!client.connected() && (millis() - lastConnectionTime > updateThingSpeakInterval))
    {
    updateThingSpeak("field1="+analogValue0+"&field2="+analogValue1);
    Serial.println(analogValue0);
    Serial.println(analogValue1);
    }
  // При кол-ве неуспешных попыток >10 – перезапуск интернет-соединения
  if (failedCounter > 10 ) {startEthernet();}
  lastConnected = client.connected();
}
// отправка данных в Канал Thingspeak
void updateThingSpeak(String tsData)
  {
  if (client.connect(thingSpeakAddress, 80))
    {         
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(tsData.length());
    client.print("\n\n");

    client.print(tsData);
    lastConnectionTime = millis();
    if (client.connected())
      {
      Serial.println("Connecting to ThingSpeak...");
      Serial.println();
      
      failedCounter = 0;
      }
    else
      {
      failedCounter++;  
      Serial.println("Connection to ThingSpeak failed ("+String(failedCounter, DEC)+")");   
      Serial.println();
      }
    }
  else
    {
    // увеличение счетчика неуспешных попыток отправки данных
    failedCounter++;
    Serial.println("Connection to ThingSpeak Failed ("+String(failedCounter, DEC)+")");   
    Serial.println();
    lastConnectionTime = millis(); 
    }
  }
// Перезапуск интернет-соединения
void startEthernet()
  {
  client.stop();
  Serial.println("Connecting Arduino to network...");
  Serial.println();  
  delay(1000);
  Ethernet.begin(mac,ip,sdns,gateway,subnet); 
  delay(1000);
    Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++)
   {
    // печать ip-адреса
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print(".");
    }
  Serial.println(); 
  delay(1000);
}

Ссылка на скетч: https://yadi.sk/d/Rb-3Cnaw3E7g7B

Видео:

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·