Ви не увійшли.
Попробую, но uart от датчика начал работать только на аналоговых портах.
А rx и tx объявлять как 0 и 1?
Потому что в коде для ардуино используется Softserial.
Для аппаратного Serial не надо ничего объявлять, просто пишете
Serial.write(measure_cmd,9);
Serial.readBytes(measure_response, 9);
https://ibb.co/nw9nLR1
Единственный минус - перед прошивкой датчик нужно отключить. Но если добавить в код обновление прошивки по ОТА, то в дальнейшем это можно не делать
На совмещенной плате распиновка esp такая:
Попробую, но uart от датчика начал работать только на аналоговых портах.
А rx и tx объявлять как 0 и 1?
Обшибся, Rx Tx поменять местами
https://ibb.co/nw9nLR1
Единственный минус - перед прошивкой датчик нужно отключить. Но если добавить в код обновление прошивки по ОТА, то в дальнейшем это можно не делать
Экран можно и к esp прицепить
Я хотел бы подключить сервопривод, чтобы в зависимости от уровня со2 перекрывать вентиляцию для большой комнаты, в которую поступает основной поток свежего воздуха, чтобы больше поступало на спальни.
Еще пишут что через uart снимать показания датчика надёжнее чем через pwm.
Там 2 пина rx/tx, на ардуино работает через А0 и А1
// отправляем запрос
byte measure_cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
swSerial.write(measure_cmd,9);
swSerial.readBytes(measure_response, 9);
// вычисляем
unsigned int responseHigh = (unsigned int) measure_response[2];
unsigned int responseLow = (unsigned int) measure_response[3];
ppm = (256*responseHigh) + responseLow;
Я так понимаю, надо, чтобы эти запросы выполнялись на ардуине и на esp передавался только вычисленный ppm?
Удивительно, но на gpio4 начало принимать))
Некоторые пины у esp новичкам лучше пока не трогать. Их нужно уметь готовить
Теперь буду разбираться с совмещением arduino с esp и с подключением экрана.
Экран можно и к esp прицепить
Спальня ночью - 2 часа без вентиляции - 780 ppm
Через 30 мин. вентиляции - 581 ppm
По таймеру вентиляция включалась раз в 2 часа, примерно угадал.
Иногда начинает выдавать 5000, наверное, датчик не всегда не отвечает. Надо убрать в скетче вывод данных в этом случае...
andrewsh пише:Нужно ли задействовать ардуино, если esp сам может считать сигнал датчика?
Нет.
Для кода с есп - куда и ка вы подключили датчик?
Удивительно, но на gpio4 начало принимать))
Теперь буду разбираться с совмещением arduino с esp и с подключением экрана.
Спасибо, ваши вопросы и подсказки помогли найти правильное направление)
Нужно ли задействовать ардуино, если esp сам может считать сигнал датчика?
Нет.
Для кода с есп - куда и ка вы подключили датчик?
1 - погуглить "ардуино передача и получение данных через uart". Почитать примеры, разобраться. После этого добавить в код для меги передачу данных через uart. Соответственно в код для есп дописать прием данных через uart.
Нужно ли задействовать ардуино, если esp сам может считать сигнал датчика?
Вот код, который у меня работает в ардуино и выводит в порт показания:
#include <SoftwareSerial.h>
#define pwmPin 10
void setup() {
Serial.begin(9600);
pinMode(pwmPin, INPUT);
}
void loop() {
th = pulseIn(pwmPin, HIGH, 1004000) / 1000;
tl = 1004 - th;
ppm = 5000 * (th-2)/(th+tl-4);
Serial.println(ppm);
delay(5000);
}
Ну а для esp код взят на Blynk, сам по себе он тоже работает и если вместо показаний датчика поставить любую переменную, то она приходит.
#define BLYNK_TEMPLATE_ID "my_template"
#define BLYNK_DEVICE_NAME "device_name"
#define BLYNK_AUTH_TOKEN "my_token"
/////////// разные уже пробовал
#define pwmPin 2
unsigned long th, tl, h, l, ppm = 0;
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "name";
char pass[] = "pass";
BlynkTimer timer;
// This function sends Arduino's up time every second to Virtual Pin (1).
void myTimerEvent()
{
// You can send any value at any time.
// Please don't send more that 10 values per second.
th = pulseIn(pwmPin, HIGH, 1004000) / 1000;
tl = 1004 - th;
ppm = 5000 * (th-2)/(th+tl-4);
////// ВОТ если здесь задать ppm=100, то мы это получим, здесь всё нормально:
Blynk.virtualWrite(V1, ppm);
}
void setup()
{
// Debug console
Serial.begin(115200);
pinMode(pwmPin, INPUT);
Blynk.begin(auth, ssid, pass);
// Setup a function to be called every second
timer.setInterval(1000L, myTimerEvent);
}
void loop()
{
Blynk.run();
timer.run(); // Initiates BlynkTimer
}
еще на gpio2 пробую датчик, не приходит ничего
Показывайте свои коды, что и как вы пробуете, как подключаете.
Я так понимаю, Rx на ESP - это gpio3, которую можно задать
#define pwmPin 3
?
Вам других пинов мало?
В общем, у вас для решения вашей задачи есть два варианта.
1 - погуглить "ардуино передача и получение данных через uart". Почитать примеры, разобраться. После этого добавить в код для меги передачу данных через uart. Соответственно в код для есп дописать прием данных через uart.
2 - переписать код для меги под есп. И если все правильно напишете и подключите вам останется только радостно наблюдать полученный результат. Потом можете взять болгарку и отпилить от платы все лишнее (шутка)
Выбирайте что вам больше нравится.
з/ы в своих дальнейших ответах (если они будут конечно) мегу буду называть ардуиной так что не путайтесь и не пугайтесь
Что ж это творится? Gомешались все на этих датчиках CO.
У меня вентиляция дома включается по таймеру, а если людей больше или меньше чем обычно, то надо вручную продлевать или выключать таймер) Должно быть проще)
Rx чего - меги или есп?
Я так понимаю, Rx на ESP - это gpio3, которую можно задать
#define pwmPin 3
?
еще на gpio2 пробую датчик, не приходит ничего
Что ж это творится? Gомешались все на этих датчиках CO.
Подключить датчик на Rx уже попробовал, не читает.
Rx чего - меги или есп?
Датчик co2 (углекислого газа) MH-Z19B, у него есть выход pwm, который читается с цифрового порта и пересчитывается в показания концентрации углекислого газа:
th = pulseIn(pwmPin, HIGH, 1004000) / 1000;
tl = 1004 - th;
ppm = 5000 * (th-2)/(th+tl-4);
Данные читаю в мониторе порта через usb, чтобы он был автономным нужно или подключить экранчик или передавать по wifi.
На плате atmega датчик работает, отвечает в порт. Также отдельно ESP и wifi-подключение работает, но совместить их пока не понимаю как.
Подключить датчик на Rx уже попробовал, не читает.