Разное о выращивании табака на Алтае
Вы не вошли.
Сделал новый Телеграм/градусник на новых библиотеках. Работает всё много стабильнее и быстрее, чем в предыдущем подобном девайсе. Даже при плохом 3G интернете, телеметрия приходит, телеуправление работает. ESP8266 "Witty Cloud" протестирован. ESP32
тоже должен работать.
https://github.com/cotestatnt/AsyncTelegram2
https://github.com/pstolarz/OneWireNg
Не в сети
#define USE_CLIENTSSL true
#include <AsyncTelegram2.h>
// Timezone definition
#include <time.h>
#define MYTZ "CET-1CEST,M3.5.0,M10.5.0/3"
#ifdef ESP8266
#include <ESP8266WiFi.h>
BearSSL::WiFiClientSecure client;
BearSSL::Session session;
BearSSL::X509List certificate(telegram_cert);
#elif defined(ESP32)
#include <WiFi.h>
#include <WiFiClient.h>
#if USE_CLIENTSSL
#include <SSLClient.h>
#include "tg_certificate.h"
WiFiClient base_client;
SSLClient client(base_client, TAs, (size_t)TAs_NUM, A0, 1, SSLClient::SSL_ERROR);
#else
#include <WiFiClientSecure.h>
WiFiClientSecure client;
#endif
#endif
AsyncTelegram2 myBot(client);
const char* ssid = "XXXXXXXXX";
const char* pass = "XXXXXXXXX";
const char* token = "XXXXXXXXXXXXXXXXXXXXXXXXXXX"; // REPLACE myToken WITH YOUR TELEGRAM BOT TOKEN
const uint8_t LED = 13;//порт синего светодиода
String T="";
#include "OneWireNg_CurrentPlatform.h"
#include "drivers/DSTherm.h"
#define OW_PIN 5//порт DS18B20
/*
* Set to true for parasitically powered sensors.
*/
#define PARASITE_POWER false
/*
* Uncomment for power provided by a switching
* transistor and controlled by this pin.
*/
//#define PWR_CTRL_PIN 9
static OneWireNg *ow = NULL;
static DSTherm *dsth = NULL;
/* returns false if not supported */
static bool printId(const OneWireNg::Id& id)
{
const char *name = DSTherm::getFamilyName(id);
Serial.print(id[0], HEX);
for (size_t i=1; i < sizeof(OneWireNg::Id); i++) {
Serial.print(':');
Serial.print(id[i], HEX);
}
if (name) {
Serial.print(" -> ");
Serial.print(name);
}
Serial.println();
return (name != NULL);
}
static void printScratchpad(DSTherm::Scratchpad *scrpd)
{
const uint8_t *scrpd_raw = scrpd->getRaw();
Serial.print(" Scratchpad:");
for (size_t i = 0; i < DSTherm::Scratchpad::LENGTH; i++) {
Serial.print(!i ? ' ' : ':');
Serial.print(scrpd_raw[i], HEX);
}
Serial.print("; Th:");
Serial.print(scrpd->getTh());
Serial.print("; Tl:");
Serial.print(scrpd->getTl());
Serial.print("; Resolution:");
Serial.print(9 + (int)(scrpd->getResolution() - DSTherm::RES_9_BIT));
long temp = scrpd->getTemp();
Serial.print("; Temp:");
if (temp < 0) {
temp = -temp;
Serial.print('-');
}
Serial.print(temp / 1000);
Serial.print('.');
Serial.print(temp % 1000);
Serial.print(" C");
Serial.println();
T=String(temp / 1000)+"."+String(temp % 1000);
}
void setup() {
#ifdef PWR_CTRL_PIN
ow = new OneWireNg_CurrentPlatform(OW_PIN, PWR_CTRL_PIN, false);
#else
ow = new OneWireNg_CurrentPlatform(OW_PIN, false);
#endif
dsth = new DSTherm(*ow);
delay(500);
// initialize the Serial
Serial.begin(115200);
#if (CONFIG_MAX_SRCH_FILTERS > 0)
dsth->filterSupportedSlaves();
#endif
dsth->writeScratchpadAll(0, 0, DSTherm::RES_12_BIT);
Serial.println("\nStarting TelegramBot...");
// set the pin connected to the LED to act as output pin
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH); // turn off the led (inverted logic!)
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, pass);
delay(500);
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
#ifdef ESP8266
// Sync time with NTP, to check properly Telegram certificate
configTime(MYTZ, "time.google.com", "time.windows.com", "pool.ntp.org");
//Set certficate, session and some other base client properies
client.setSession(&session);
client.setTrustAnchors(&certificate);
client.setBufferSizes(1024, 1024);
#elif defined(ESP32)
// Sync time with NTP
configTzTime(MYTZ, "time.google.com", "time.windows.com", "pool.ntp.org");
#if USE_CLIENTSSL == false
client.setCACert(telegram_cert);
#endif
#endif
// Set the Telegram bot properies
myBot.setUpdateTime(1000);
myBot.setTelegramToken(token);
// Check if all things are ok
Serial.print("\nTest Telegram connection... ");
myBot.begin() ? Serial.println("OK") : Serial.println("NOK");
Serial.print("Bot name: @");
Serial.println(myBot.getBotName());
}
void ds18b20()
{
OneWireNg::Id id;
OneWireNg::ErrorCode ec;
MAKE_SCRATCHPAD(scrpd);
/* convert temperature on all sensors connected... */
dsth->convertTempAll(DSTherm::SCAN_BUS, PARASITE_POWER);
/* ...and read them one-by-one */
ow->searchReset();
do
{
ec = ow->search(id);
if (!(ec == OneWireNg::EC_MORE || ec == OneWireNg::EC_DONE))
break;
if (printId(id)) {
if (dsth->readScratchpad(id, scrpd) == OneWireNg::EC_SUCCESS) {
printScratchpad(scrpd);
} else {
Serial.println(" Invalid CRC!");
}
}
} while (ec == OneWireNg::EC_MORE);
Serial.println("----------");
delay(1000);
}
void loop() {
// local variable to store telegram message data
TBMessage msg;
// if there is an incoming message...
if (myBot.getNewMessage(msg)) {
String msgText = msg.text;
if (msgText.equals("т1") or msgText.equals("t1"))
{
ds18b20();
// generate the message for the sender
String reply;
reply = "Бот 1. Температура 1: " ;
reply += (T+"*C");
myBot.sendMessage(msg, reply);
}
if (msgText.equals("off1")) { // if the received message is "LIGHT ON"...
digitalWrite(LED, LOW); // turn on the LED (inverted logic!)
myBot.sendMessage(msg, "Бот 1. Синий светодиод выключен"); // notify the sender
}
else if (msgText.equals("on1")) { // if the received message is "LIGHT OFF"...
digitalWrite(LED, HIGH); // turn off the led (inverted logic!)
myBot.sendMessage(msg, "Бот 1. Синий светодиод включен"); // notify the sender
}
else { // otherwise...
}
}
}
Не в сети
Если боту будет отправлена команда "t1", в ответ бот пришлёт температуру в данный момент времени.
Если боту будет отправлена команда "on1", бот включит синий светодиод.
Если боту будет отправлена команда "off1", бот выключит синий светодиод.
Не в сети
Не в сети
Не в сети
Не в сети
Не в сети
Начнём долговременный эксперимент, на esp8266 и новых библиотеках. Посмотрим, не будет ли микропроцессор зависать на длительных промежутках измерения.
Не в сети
Чтоб найти мой бот в Телеграм, нужно набрать в поиске "Температура в Бийске".
Бот открытый, можете сами запрашивать тепературу у бота, по средствам команд "Т1","т1","T1","t1".
Не в сети