Снять температуру и влажность с датчика DHT11 и получить результаты на экране телефона, также как и управлять модулем реле с помощью Blynk не составило никакого труда. А вот с управлением радиорозетками пришлось повозится и сдвинулся с места только благодаря Владимиру и его Майстер-классу Smartify Things! все стало на свои места. И так по порядку.
Подключение ARDUINO + W5100 и Blynk описаны в предыдущей записи блога.
Как подключить 433Мгц передатчик и откуда взялись коды сигналов для радиорозеток можно узнать с записи ARDUINO + радиомодуль 433Мгц, а о том как работать с датчиком температуры и влажности - читаем здесь ARDUINO + 16х2 LCD keypad shield (двухрядный дисплей с кнопками) + DHT11 (датчика температуры и влажности). Объединив знания предыдущих экспериментов, задача стоит заставить Blynk через 433Мгц передатчик управлять радиорозетками.
Для этого понадобятся следующие библиотеки (добавляем в библиотеки ARDUINO IDE):
RemoteSwitch.h, dht11.h, а также ряд библиотек которые идут в наборе с Blynk.
Подключаю датчик DHT11 на 7 пин, а на 8 пин 433Мгц передатчик, подключаем к ноуту и заливаем скетч:
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <RemoteSwitch.h> // это скачанная библиотека
#include <SPI.h>
#include <Ethernet.h>
#include <BlynkSimpleEthernet.h>
#include <dht11.h> // Добавляем библиотеку DHT11
dht11 DHT; // Объявление переменной класса dht11
#define DHT11_PIN 7 // Датчик DHT11 подключен к цифровому пину номер 7
int chk;
#define A1ON 358833 //(352833) код кнопки от радиопульта
#define A1OFF 352729
#define B1ON 356805
#define B1OFF 353301
#define C1ON 334129
#define C1OFF 351125
#define D1ON 354937
#define D1OFF 314233
#define E1ON 354243
#define E1OFF 334269
#define PERIOD 193; //(193) period duration: - полученные из (монитор порта)
#define PERIOD 192;
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "key";
// Use Virtual pin 5 for uptime display
#define PIN_TEMP V5
#define PIN_HUM V6
void setup()
{
Serial.begin(9600); //установка порта на скорость 9600 бит/сек
Blynk.begin(auth);
}
// This function tells Arduino what to do if there is a Widget
// which is requesting data for Virtual Pin (5)
BLYNK_READ(PIN_TEMP)
{
// This command writes Arduino's uptime in seconds to Virtual Pin (5)
// Мониторинг ошибок
chk = DHT.read(DHT11_PIN); // Чтение данных
// Выводим показания влажности и температуры
Blynk.virtualWrite(PIN_TEMP, DHT.temperature);
Blynk.virtualWrite(PIN_HUM, DHT.humidity);
}
BLYNK_WRITE(V1) {
if (param.asInt()) {
transmit(A1ON);
} else {
transmit(A1OFF);
}
}
BLYNK_WRITE(V2) {
if (param.asInt()) {
transmit(B1ON);
} else {
transmit(B1OFF);
}
}
BLYNK_WRITE(V3) {
if (param.asInt()) {
transmit(C1ON);
} else {
transmit(C1OFF);
}
}
BLYNK_WRITE(V4) {
if (param.asInt()) {
transmit(D1ON);
} else {
transmit(D1OFF);
}
}
void loop()
{
Blynk.run();
}
void transmit(unsigned long rcode)
{
unsigned long code = rcode;
unsigned long period = PERIOD;
code |= (unsigned long)period << 23;
code |= 4L << 20; //(|= 4L) цифра перед (L), это (условное число), количества повторов посылаемого сигнала. (соответственно и паузы)
RemoteSwitch::sendTelegram(code, 8); // RF transmitter pin - пин радио передатчика
}
В мобильном приложении Blynk создаем новое подключение и переносим в скетч "YourAuthToken". Добавляем в приложение пару "кнопок" и "дисплеев".
Дисплей который будет отображать температуру вешаем на виртуальный пин 5, влажность - 6. Кнопки - на виртуальные пины 1-4. Запускаем приложение и подключаемся к устройству. Если все подключилось правильно - на дисплеях будет отображаться текущая температура и влажность получаемая с датчика DHT11, а при нажатии на кнопки - будет выполняться процедура (макрос) BLYNK_WRITE которая в зависимости от состояния кнопки (кстати она должна быть настроена в формате "switch") передает в процедуру "transmit" соответствующую переменную которая уже отвечает коду сигнала передаваемого через 433Мгц передатчик на радиорозетки.
ВНИМАНИЕ!!! В скетч необходимо внести свои код авторизации Blynk, а также коды соответствующие сигналам вкл./выкл. розеток (откуда и как их получить описано в записи блога ARDUINO + радиомодуль 433Мгц.)
Дальнейшие варианты использования данной связки ограничивает только фантазия! Удачи!
Доброго времени, собрал схему как у вас, за вычетом радиорозетки, соответственно часть кода, отвечающую за её работу, выкинул. Использую датчик DHT 11, при использовании билиотеки dht11.h (как у вас) всё работает отлично, но вот при использовании библиотеки под датчики DHT11/22 (хочу использовать DHT22 вместо DHT 11), объявляю переменную DHT22, при этом в строках
ВідповістиВидалитиBlynk.virtualWrite(PIN_TEMP, DHT.temperature);
Blynk.virtualWrite(PIN_HUM, DHT.humidity);
получаю ошибку "exit status 1
expected primary-expression before '.' token"
Код:
#include
#include
#include
//#include // Добавляем библиотеку DHT11
#include
DHT22 DHT; // Объявление переменной
#define DHT22_PIN 7
#define DHTTYPE DHT22
int chk;
char auth[] = "2***d";
// Use Virtual pin 5 for uptime display
#define PIN_TEMP V5
#define PIN_HUM V6
void setup()
{
Serial.begin(9600);
Blynk.begin(auth);
}
BLYNK_READ(PIN_TEMP)
{
chk = DHT.read(DHT22_PIN);
Blynk.virtualWrite(PIN_TEMP, DHT.temperature);
Blynk.virtualWrite(PIN_HUM, DHT.humidity);
}
void loop()
{
Blynk.run();
}
Подскажите - где копать ?
Доброго времени суток, Дмитрий. Комментарий почему-то папл в премодерацию и не пришло никакого уведомления(
ВидалитиОтносительно вопроса, удалось ли решить проблему? Ранее смотрел библиотеки для 11 и 22, они существенно отличались из-за ӕьлшл скорее и возникла проблема. Если актуально - можно попытаться разобраться.
Виталий, спасибо за отклик. Проблема актуальна, скорее всего я упускаю что то явное и важное, покопался в нете и решения, пока , увы не нашёл. Буду признателен за подсказку.
ВідповістиВидалитиПроблема связанна с библиотекой для DHT. Для работы только с DHT в Blynk есть отличный пример в папке Blynk->More->DHT11 там работа как с DHT11 так и DHT22
Видалити* This example shows how value can be pushed from Arduino to
* the Blynk App.
*
* WARNING :
* For this example you'll need SimpleTimer library:
* https://github.com/jfturcot/SimpleTimer
* and Adafruit DHT sensor library:
* https://github.com/adafruit/DHT-sensor-library
*
* App project setup:
* Value Display widget attached to V5
* Value Display widget attached to V6
*
**************************************************************/
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include
#include
#include
#include
#include
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";
#define DHTPIN 2 // What digital pin we're connected to
// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22, AM2302, AM2321
//#define DHTTYPE DHT21 // DHT 21, AM2301
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;
// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// You can send any value at any time.
// Please don't send more that 10 values per second.
Blynk.virtualWrite(V5, h);
Blynk.virtualWrite(V6, t);
}
void setup()
{
Serial.begin(9600); // See the connection status in Serial Monitor
Blynk.begin(auth);
dht.begin();
// Setup a function to be called every second
timer.setInterval(1000L, sendSensor);
}
void loop()
{
Blynk.run(); // Initiates Blynk
timer.run(); // Initiates SimpleTimer
}