ILI9488 3,95 дюйма, сенсорный экран

Смысл - электронная записка. Сама Ардуина ничего не сочинит. Другой вариант это наговаривать на смартфон (тут теряется вся магия сенсорного экрана), он на ЕСП32 через его блютуз и на экран фразу. Подобное делал уже на уно бегущей строкой, но подзабыл.

Тут наверное со шрифта рукописного начать надо. А это я понял тяжелая задача для графики :slight_smile:

И какое это имеет преимущество перед смартфоном?

У неё совсем другой смысловой вес. Она привязана физически к месту, а смартфон к адресату. Соответственно время и место получения никак не связано с её местом и “временем получения”, хотя имитацию электронной записки можно реализовать на смартфоне. Как следствие, её содержимое может быть бесполезным для получателя или иметь иной смысл, отличный от смысла подразумеваемого автором.

Тогда чем это лучше обычной школьной грифельной доски?

Ну да, Ардуина такого никогда не позволит.

В том и смысл, не лучше доски школьной или листка бумаги, но по другому.

Нашёл и вспомнил частично из мит апп инвентора 2. Приложение простое, простое :slight_smile:



Скетч тоже не сложный и схему менять не надо… Недостаток : даже чёткая речь не страхует от ошибок распознавания… это наверное из-за отсутствия подключения к интернету.

//ESP32
// голосовая запись текстом с смартфона
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
#include <SPI.h>          
#include <TFT_eSPI.h>       // Hardware-specific library
TFT_eSPI tft = TFT_eSPI();  // Invoke custom library
#define h  5 //
uint16_t color=tft.color565(0,0,0);
uint16_t x, y;// Переменные для работы с координатами нажатий
int Xk=0,Yk=h;// переменные хранения положения курсора
BluetoothSerial SerialBT;
String inputString;// строки данных

void setup() {
 SerialBT.begin("ESP32test"); //НАЗВАНИЕ БЛЮТУЗ МОДУЛЯ
 //Serial.begin(9600);
tft.init();
tft.setRotation(3);// Переводим дисплей в альбомную ориентацию
tft.fillScreen(color);//заливка фона
tft.setTextSize(3); tft.setTextColor(tft.color565(255,255,0),tft.color565(127,127,127));
tft.setCursor(h,h);  
}

void loop() {
  CheckSerial();//приём данных строк
  if (tft.getTouch(&x, &y)) {//очистка экрана касанием
  tft.fillScreen(color);//заливка фона 
  tft.setCursor(h,h);//возврат курсора 
  }
}
//
//ФУНКЦИИ ПРИЁМА И ОБРАБОТКИ КОМАНД-ДАННЫХ
void CheckSerial()
{
  //
  while (SerialBT.available())//считываем строку данных пока они поступают
  {
    char inChar = (char)SerialBT.read();
    if (inChar == '\n')     //если окончание строки или запрос на загрузку
    {
      MakeCmd();//обрабатываем её данной функцией
      break;
    }
    else inputString += inChar;// иначе удлиняем строку на один символ
  }
 
}
//
void MakeCmd()
{
  int y = inputString.length(); // присваиваем переменной у число символов в строке
  String cmd = inputString; // передаём строку другой переменной
  inputString = "";//"обнуляем переменную"
  //////
 //Serial.print(cmd);Serial.print(' ');
 tft.println(cmd);
  //
}

//

Вопрос такой возник у меня - как связать блютуз модуль ЕСП32 и модуль НС-05 ? Смартфон связывается быстро, а модуль не хочет. Хочется через ПК попробовать текст в записку писать дистанционно.

Не нашёл варианта в сети, почему то только подключение ещё одного HC-05 к самому ЕСП32…
Подключил такой к ПК:


Связь установилась, но монитор порта на работает с русскими буквами на отправку. То есть принятые пишет правильно, а вот при отсылке нет. Интересно как такое может быть и как это поправить? Вот проверочный вариант теста:

//ESP32
// голосовая запись текстом с смартфона и печать через монитор порта
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
#include <SPI.h>          
#include <TFT_eSPI.h>       // Hardware-specific library
TFT_eSPI tft = TFT_eSPI();  // Invoke custom library
#define h  5 //
uint16_t color=tft.color565(0,0,0);
uint16_t x, y;// Переменные для работы с координатами нажатий

BluetoothSerial SerialBT;
String inputString;// строки данных

void setup() {
 SerialBT.begin("ESP32test"); //НАЗВАНИЕ БЛЮТУЗ МОДУЛЯ
 Serial.begin(9600);
tft.init();
tft.setRotation(3);// Переводим дисплей в альбомную ориентацию
tft.fillScreen(color);//заливка фона
tft.setTextSize(3); tft.setTextColor(tft.color565(255,255,0),tft.color565(127,127,127));
tft.setCursor(h,h);  
}

void loop() {
  CheckSerial();//приём данных строк
  if (tft.getTouch(&x, &y)) {//очистка экрана касанием
  tft.fillScreen(color);//заливка фона 
  tft.setCursor(h,h);//возврат курсора 
  }
}
//
//ФУНКЦИИ ПРИЁМА И ОБРАБОТКИ КОМАНД-ДАННЫХ
void CheckSerial()
{
  //
  while (SerialBT.available())//считываем строку данных пока они поступают
  {
    char inChar = (char)SerialBT.read();
    if (inChar == '\n')     //если окончание строки или запрос на загрузку
    {
      MakeCmd();//обрабатываем её данной функцией
      break;
    }
    else inputString += inChar;// иначе удлиняем строку на один символ
  }
 //
 while (Serial.available()) //если есть доступные данные
  {
    char inChar = (char)Serial.read();
    if (inChar == '\n')     //если окончание строки или запрос на загрузку
    {
      MakeCmd();//обрабатываем её данной функцией
      break;
    }
    else inputString += inChar;// иначе удлиняем строку на один символ
 }
}
//
void MakeCmd()
{
  int y = inputString.length(); // присваиваем переменной у число символов в строке
  String cmd = inputString; // передаём строку другой переменной
  inputString = "";//"обнуляем переменную"
  //////
 Serial.print(cmd);Serial.println(' ');
 tft.println(cmd);
  //
}

//

А может просто отправляет как и положено в utf-8? У тебя это дело на принимающей стороне как обрабатывается/перекодируется?

Скетч выше дан. Ничего там не обрабатывается, пишет как есть. Но тогда ещё больше вопросов возникает :slight_smile: В приложениях смартфона, когда их делал два варианта было utf-8 этот, и брал кажется СР1251 ( в настройках передачи блютуза). В этом приложении точно стоит UTF-8. Как он тогда передаёт русские буквы на ЕСП32?, и в мониторе идёт правильная дублирующая распечатка?, и на экран. А вот если в мониторе (строка командная) написать и отправить то на экране какие то чёрточки, а в мониторе-экране квадратики :slight_smile:

Как и положено - двумя байтами

Значит монитор правильно понимает utf-8

Значит не совсем правильно ))

Не ясно почему нет равнозначности в направлениях передачи данных?

Нет в мире совершенства ))

Вот здесь у меня есть пример перекодировки символов

Смысл в том, что при переборе байтов все, что меньше 0xC0, перекодировке не подлежит, а все, что дальше рассматривается с пристрастием. Если встречается служебный байт (для кириллицы это 0xD0 и 0xD1), то он пропускается, а следующий за ним байт перекодируется и в итоге получается ANSI-код русского символа в Win-1251. Вот его и используем ))

Ясно :), дело тёмное, надо разбираться. Я думал максимум написать

char inChar = (char (CP1251))Serial.read();

Не в этой реальности ))

может потому что на разных концах этой передачи разный софт и железо?

Ну чисто в философском плане да. А так неясно. Смартфон шлёт последовательность байт и плата понимает и ПК шлёт - плата не понимает. То есть где косяк?, в мониторе IDE? Нужно приложение самописное для ПК? Просто синтаксис абсолютно одинаков при приёме по блютуз и по “шлангу” от ПК…Слишком много вопросов :frowning:

Плату кто программировал, разве не вы?
Если да - то почему не послать одну и ту же строчку со смарта и с ПК и не сравнить побайтно, что пришло на плату в обоих случаях?

А что даст сравнение? Байты пришли разные и что? Байты пришли одинаковые? И что? Мне надо скорее всего в кодировки вникнуть. Разные байты - разные кодировки. Одинаковые байты-одинаковые кодировки.

Чего то совсем запутываюсь. Человек вторым сообщением ставит под сомнение возможность вывода русских букв в монитор.