Разное о выращивании табака на Алтае
Вы не вошли.
Русские шрифты стырил тут. https://github.com/immortalserg/AdafruitGFXRusFonts
Универсальный Telegram Bot: https://github.com/witnessmenow/Univers … legram-Bot
Библиотека PxMatrix: https://github.com/2dom/PxMatrix
Не в сети
#include <Adafruit_GFX.h>
#include <FontsRus/TimesNRCyr10.h>
#include <FontsRus/TimesNRCyr6.h>
#include <FontsRus/TimesNRCyr7.h>
#include <FontsRus/TimesNRCyr8.h>
#include <FontsRus/Crystal8.h>
#include <FontsRus/Bat8.h>
#include <FontsRus/Cooper8.h>
#include <FontsRus/Cooper6.h>
#include <FontsRus/FreeSerif8.h>
#include <FontsRus/FreeSerif6.h>
#include "Arduino.h"
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#define WIFI_SSID "Имя сети"
#define WIFI_PASSWORD "Пароль"
// Telegram BOT Token (Get from Botfather)
#define BOT_TOKEN "Токен вашего бота"
// Wifi network station credentials
const unsigned long BOT_MTBS = 1000; // mean time between scan messages
unsigned long bot_lasttime; // last time messages' scan has been done
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
#include <PxMatrix.h>
// Pins for LED MATRIX ESP32
#include <Ticker.h>
Ticker display_ticker;
#define P_LAT 22
#define P_A 19
#define P_B 23
#define P_C 18
#define P_D 5
#define P_OE 16
#define matrix_width 32
#define matrix_height 64
uint8_t display_draw_time=20; //10-50 is usually fine
PxMATRIX display(64,32,P_LAT, P_OE,P_A,P_B,P_C,P_D);
void tempTask(void *pvParameters);
bool getTemperature();
void triggerGetTemp();
/** Task handle for the light value read task */
TaskHandle_t tempTaskHandle = NULL;
/** Ticker for temperature reading */
Ticker tempTicker;
/** Flag if task should run */
bool tasksEnabled = false;
void display_updater()
{
display.display(display_draw_time);
}
void display_update_enable(bool is_enable)
{
if (is_enable)
display_ticker.attach(0.002, display_updater);
else
display_ticker.detach();
}
// Начало функции обработки кириллических символов
String ru(String source)
{
int i,j,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = j = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 127) {
switch (n) {
case 208: {
n = source[i]; i++;
if (n == 129) { n = 192; break; } // перекодируем букву Ё
break;
}
case 209: {
n = source[i]; i++;
if (n == 145) { n = 193; break; } // перекодируем букву ё
break;
}
}
}
m[0] = n;target = target + String(m);
j++;
}
return target;
}
// Конец функции обработки кириллических симоволов
void handleNewMessages(int numNewMessages)
{
Serial.print("handleNewMessages ");
Serial.println(numNewMessages);
String answer;
for (int i = 0; i < numNewMessages; i++)
{
telegramMessage &msg = bot.messages[i];
Serial.println("Received " + msg.text);
display.clearDisplay();
display.setCursor(0,8);
display.print(ru(msg.text));
}
}
void bot_setup()
{
const String commands = F("["
"]");
bot.setMyCommands(commands);}
void setup()
{
Serial.begin(115200);
Serial.println();
// attempt to connect to Wifi network:
Serial.print("Connecting to Wifi SSID ");
display.begin(16);
delay(500);
display.setFastUpdate(true);
display.clearDisplay();
display.setTextColor(display.color565(0,100,0));
//display.setFont(&TimesNRCyr6pt8b);
//display.setFont(&Crystal8pt8b);
//display.setFont(&Cooper6pt8b);
display.setFont(&FreeSerif6pt8b);
display.setTextSize(0);
display_update_enable(true);
display.setCursor(0,7);
display.print(ru("Подключение к WiFi"));
Serial.print(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
while (WiFi.status() != WL_CONNECTED)
{
display.setCursor(0,30);
display.print(".");
Serial.print(".");
delay(500);
}
Serial.print("\nWiFi connected. IP address: ");
Serial.println(WiFi.localIP());
Serial.print("Retrieving time: ");
configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
time_t now = time(nullptr);
while (now < 24 * 3600)
{
Serial.print(".");
delay(100);
now = time(nullptr);
}
Serial.println(now);
bot_setup();
display.clearDisplay();
}
void loop()
{
if (millis() - bot_lasttime > BOT_MTBS)
{
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages)
{
Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
bot_lasttime = millis();
}
}
Не в сети
Не в сети
Не в сети
Не в сети
Сейчас подключил ESP к телефону, через точку доступа WiFi. Через Мегафон с хорошим приёмом, сообщения приходят мгновенно.
Проблем, что были с ESP8266 на дачном боте, совершенно нет. Видимо, вся проблема с дачным ботом, заключалась в тормознутости ESP8266.
Не в сети
Функцию обработки кириллических символов сам переработал.
Код моей функции (С).
// Начало функции обработки кириллических символов
String ru(String source)
{
int i,j,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = j = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 127) {
switch (n) {
case 208: {
n = source[i]; i++;
if (n == 129) { n = 192; break; } // перекодируем букву Ё
break;
}
case 209: {
n = source[i]; i++;
if (n == 145) { n = 193; break; } // перекодируем букву ё
break;
}
}
}
m[0] = n;target = target + String(m);
j++;
}
return target;
}
// Конец функции обработки кириллических символов
Код функции, которой раньше пользовался.
// Начало функции обработки кириллических символов
String utf8rus(String source) // Функция для конвертации русских символов из кодировки CP1251 в UTF8
{
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xBF){
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB7; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
// Конец функции обработки кириллических символов.
К новым шрифтам FontsRus она не подходила.
Код функции в пакете FontsRus переводит текст в вид типа char. Мне нужен был String.
#define maxString 100 // ограничиваем строку шириной экрана
char target[maxString + 1] = "";
char *utf8rus2(char *source)
{
int i,j,k;
unsigned char n;
char m[2] = { '0', '\0' };
strcpy(target, ""); k = strlen(source); i = j = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 127) {
switch (n) {
case 208: {
n = source[i]; i++;
if (n == 129) { n = 192; break; } // перекодируем букву Ё
break;
}
case 209: {
n = source[i]; i++;
if (n == 145) { n = 193; break; } // перекодируем букву ё
break;
}
}
}
m[0] = n; strcat(target, m);
j++; if (j >= maxString) break;
}
return target;
}
Не в сети