Много времени прошло, я вернулся к проекту, насколько хватило сил. Спойлер - в целом получилось, но не все.
Просуммирую долгие мытарства по пониманию как/чем прошивать ESP8266, какие у него дефолтные настройки и т.д.
Для прошивки я использовал адаптер на PL2303, вот такой:
https://belchip.by/product/?selected_product=47603
Очень долгое время был траблшутинг, потому что просто подключение терминалом к адаптеру не работало, никак. Пробовал разные скорости, 8-N-1 режим, совершенно стандартный для этих дел. Все было без толку. НО, скорее всего виноват адаптер мой на PL2303 т.к на Винде он не работает вообще (официальные драйвера скачанные с сайта в названии устройства пишут PRODUCT PHASED OUT CONTACT YOUR SUPPLIER и все.
Второй рабочий компьютер у меня Mac (Hackintosh) и на нем адаптер так же с офф. драйверами работает более менее. С Ардиуно что я раньше упоминал в теме - да. А вот с ESP8266 не захотел.
Прошло еще некоторое время пока я не попробовал пойти ардиуно-путем и в офф приложение Arduino IDE установить библиотеку от ESP8266, добавив кастомный сорс. Тогда сработало.
И добавив библиотеку в поиске "ESP8266" - после этого ТОЛЬКО терминал Arduino начал воспринимать текст от этого модуля. Любые другие терминальные программы (стандартный Terminal в поставке макоси, zoc8, Serial
https://www.decisivetactics.com/products/serial/ и т.д. не работали и далее).
HOW-TO гайд по прошивке модуля:
1. У ESP8266 в режиме bootloader (переключение слайдера PROGRAM на этом китайском модуле), т.е. режим прошивки настройки следующие:
Тут можно почитать подробнее:
https://docs.espressif.com/projects/esp ... ction.html
2. Устанавливаете Arduino IDE, добавляете кастомный сорс:
Код: Выделить всё
https://arduino.esp8266.com/stable/package_esp8266com_index.json
3. Я нашел проект какого-то человека, что допилил стандартный Arduino-скетч из пункта "Examples" самой среды разработки Arduino IDE, который я пытался использовать, но он почему то не работал. Этот работает.
https://github.com/NaoNaoMe/ESP8266-WiF ... ent-bridge
ИЛИ
загружаете (копируете) программу прикрепленную в сообщении. Почему я решил процитировать кодом? Файлы рано или поздно удаляются с Радиокота, текст - нет. Она небольшая.
Я еще допилил и импортировал содержимое config.h из его версии в основное тело программы (а почему нет то, зачем файлы множить)? Плюс. откомментировал немного, как понимал код.
Код: Выделить всё
//******************************************************************************
// WiFiUartTransparentBridge
// Version 1.1.0
// Note
// This sketch is based on "WiFiTelnetToSerial - Example Transparent UART to Telnet Server for esp8266"
// modified by log4x4 at logx4x4@gmail.com
// 2023
//******************************************************************************
#include <ESP8266WiFi.h>
//uncomment (or comment if you wish to use DYNAMIC IP) if you wish to use STATIC IP
#define STATIC_IP_ADDR
//SSID, password, network port and baudrate
const char* ssid = "yournetworkname";
const char* password = "yourpass";
const int networkport = 23;
const int baudrate = 9600;
//name of your device for customising the text strings
const char* devicename = "V7-65/2";
WiFiServer localServer(networkport);
WiFiClient localClient;
//fill your WiFi network static options here
#ifdef STATIC_IP_ADDR
IPAddress staticIP(192,168,100,65);
IPAddress gateway(192,168,100,1);
IPAddress subnet(255,255,255,0);
#endif
void setup()
{
Serial.begin(baudrate, SERIAL_7N2); //mode selection, refer more to: https://www.arduino.cc/reference/en/language/functions/communication/serial/begin/
WiFi.begin(ssid, password);
#ifdef STATIC_IP_ADDR
WiFi.config(staticIP, gateway, subnet);
#endif
Serial.print("\nConnecting to "); Serial.println(ssid);
uint8_t i = 0;
while (WiFi.status() != WL_CONNECTED && i++ < 20) delay(500);
if(i == 21)
{
Serial.print("Could not connect to"); Serial.println(ssid);
while(1) delay(500);
}
//start UART and the server
localServer.begin();
localServer.setNoDelay(true);
Serial.print("Ready! Use UART-WiFi Bridge ");
Serial.print(WiFi.localIP());
Serial.print(" on port ");
Serial.print(networkport);
Serial.print(" to connect to your ");
Serial.println(devicename);
}
void loop()
{
//check if there are any new clients
if (localServer.hasClient())
{
if (!localClient.connected())
{
if(localClient) localClient.stop();
localClient = localServer.available();
localClient.write("Welcome to "); //my added string
localClient.write(devicename);
}
}
//check a client for data
if (localClient && localClient.connected())
{
if(localClient.available())
{
size_t len = localClient.available();
uint8_t sbuf[len];
localClient.readBytes(sbuf, len);
Serial.write(sbuf, len);
}
}
//check UART for data
if(Serial.available())
{
size_t len = Serial.available();
uint8_t sbuf[len];
Serial.readBytes(sbuf, len);
if (localClient && localClient.connected())
{
localClient.write(sbuf, len);
}
}
}
4. После того как вы изменили настройки в программе (дефолтное имя сети, пароль, можно установить другой статический адрес или порт если есть желание), отсоединяем модуль от вашего терминал-адаптера, переводим переключатель в режим UART, подаем на модуль +5v и попробуем подключится к нему командой в терминале, у меня это выглядит так:
Если вы увидели приветственное сообщение "Welcome to V7-65/2", значит что все работает.
Здесь гайд заканчивается и далее описываю что я делал что бы получить с вольтметра хоть какие то данные.
Выяснилось что линия TX у вольтметра инвертирована инвертором IN74AC04N, ножки 1-2. Я так и не придумал как обратно инвертировать данные назад, поэтому выкусил тот инвертер что стоял, купил такой новый, впаял панельку, а ноги 1-2 поднял в воздух. На плате контакты 1-2 соединил, получилась линия напрямую к процессору. Сам модуль подключается изготовленным для него кабелем в разъем для интерфейса RS232/IEE488. Распиновка такая:
Подключая его к разъему, можно нажать на вольтметре МЕНЮ, далее кнопку ТПД - и активируется Режим передачи данных. Вольтметр посылает измерения непрерывно.
Что же тогда не работает?
Я пытался управлять им в обычном режиме удаленного управления, посылая команды, но до сих пор не ясно какой режим терминала ему нужен. В руководстве написано что он работает в КОИ-7, и хоть какой то работоспособности, а не кракозябр, мне удалось добиться только устанавливая режим 7-N-1 (тогда ругается ERR51 - ошибка стоп бита), если 7-N-2 - тогда ошибка четности. Выбирая режим 7-E-2 или 7-O-2 (even/odd четность) сообщения превращаются в нечитаемый мусор, хотя четность ему нужна. Еще в руководстве написано, что в команде ему нужно передавать символы ПС в конце строки (т.е. Перевод Строки, на кириллице причем). Как это сделать не знаю, шестнадцатиричным кодом что ли..
Здесь уже требуется помощь знающих.
Забавно что расстояние дырок в корпусе вольтметра практически совпало с расстоянием дырок в креплении платки. M2 винты подходят и все закрепляется отлично. На показания работа адаптера в WiFi никак не повлияла, на скриншоте измерение того самого 332.004Ом сверхточного резистора, что я показывал в теме ранее. Несколько больше греется стаб +5v, что понятно, но не очень сильно.
P.S. навесил керамику и на инвертор, чего ранее не делал. Неожиданно вольтметр перестал стартовать с "мусором на экране" до ресета. Он там по схеме много где используется, видимо что-то дало.
Спасибо
techenergy за помощь!
