Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Версия компилятора, наверное, очень старая.
- Реклама
avr-gcc 9.2.0
WinAVR новее, чем WinAVR-20100110 не нашел
WinAVR новее, чем WinAVR-20100110 не нашел
Ну не знаю, должно собираться:
Точно исходники нужной версией собираются? а не той древней, что в комплекте с WinAVR идёт?
Код: Выделить всё
wiselord@home /home/AVR/Projects/ampcontrol-m32 $ avr-gcc --version
avr-gcc (Gentoo 9.2.0-r2 p3) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
wiselord@home /home/AVR/Projects/ampcontrol-m32 $ make -s
AVR Memory Usage:
Program: 31794 bytes (.text + .data)
Data: 1763 bytes (.data + .bss)На этой системе другая не стояла. Всё скачано и поставлено с нуля
avr-gcc --version
- Реклама
Наверное я что-то делаю не так. Уже перекачал заново с другого места. Результат вот такой
Добавлено after 20 minutes 1 second:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Всё получилось. Спасибо, Владимир!
Добавлено after 9 minutes 28 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Только вот сдается мне, что памяти не хватит
Добавлено after 20 minutes 1 second:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Всё получилось. Спасибо, Владимир!
Добавлено after 9 minutes 28 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Только вот сдается мне, что памяти не хватит
Код: Выделить всё
AVR Memory Usage:
Program: 32304 bytes (.text + .data)
Data: 1764 bytes (.data + .bss)- Вложения
-
- Снимок.PNG
- (14.4 КБ) 375 скачиваний
Ну.. почему не хватит. Ещё 464 байта незанятых осталось.
Но всё равно странно, что так много получилось. Может, из-за убранного -flto?
Но всё равно странно, что так много получилось. Может, из-за убранного -flto?
Вечером попробую вернуть эту "фиту" назад)) Отпишусь. Спасибо за помощь
Добавлено after 9 hours 20 minutes 3 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Владимир, вернул назад функцию -flto
Вот результат компиляции
Добавлено after 9 hours 20 minutes 3 seconds:
Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864
Владимир, вернул назад функцию -flto
Вот результат компиляции
Код: Выделить всё
AVR Memory Usage:
Program: 31798 bytes (.text + .data)
Data: 1763 bytes (.data + .bss)- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
сделал wifi пульт с управлением по Modbus TCP
(даже с обратной связью для ON\OFF и MUTE и возможностью удаленного управления через KaScada_Cloud
)
+есть теперь возможность вывести на экран пульта температуру и напряжение (через esp8266, а не через МК)
-esp8266 (NodeMCU v.3) + KaScada HMI ModBus + FLProg 6.1.1
-принцип управления по UART, т.е. также как и версия для ПК
Пульт





проект в flprog 6.1.1
проект для KaScada HMI ModBus
скетч для IDE 1.8.8 - АХТУНГ! ПОРТЯНКА
#include <WiFiUdp.h>
#include <ESP8266mDNS.h>
#include <EEPROM.h>
#include <ArduinoOTA.h>
extern "C" {
#include "user_interface.h";
}
bool _modbusSlaveDataTable_0[17];
int _modbusSlaveAddresTable_0[17] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 15, 16, 17, 18, 19};
int _modbusSlaveDataTable_4[3];
int _modbusSlaveAddresTable_4[3] = {0, 1, 2};
byte _modbusSlaveBufferSize = 0;
byte _modbusSlaveBuffer[64];
const unsigned char _modbusSlave_fctsupported[] = {1, 5, 15, 3, 6, 16};
WiFiServer _modbusSlaveTCPServer(502);
WiFiClient _modbusSlaveTCPClient;
byte _modbusSlaveMBAPBuffer[6];
extern "C" {
#include "user_interface.h"
}
os_timer_t watchDogTimer;
int _PWDC = 0;
bool ESP8266ControllerWifiClient_HRD = 0;
bool ESP8266ControllerWifiClient_status = 1;
bool ESP8266ControllerWifiClient_isDHCP = 0;
bool ESP8266ControllerWifiClient_IsNeedReconect = 0;
bool ESP8266ControllerWifiClient_workStatus = 1;
char ESP8266ControllerWifiClient_SSID[40] = "GavigorWiFi-2.4";
char ESP8266ControllerWifiClient_password[40] = "24061984";
IPAddress ESP8266ControllerWifiClient_ip(192, 168, 138, 90);
IPAddress ESP8266ControllerWifiClient_dns (192, 168, 138, 1);
IPAddress ESP8266ControllerWifiClient_gateway (192, 168, 138, 1);
IPAddress ESP8266ControllerWifiClient_subnet (255, 255, 255, 0);
uint8_t ESP8266ControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
bool ESP8266ControllerWifi_isNeededRestsrt= 0;
String _OtaUpdater_Name = "esp8266_MUZZON" ;
int ESP8266_freeParam_4202586 = 50 ;
String _OtaUpdater_Password = "87654321" ;
WiFiServer ESP8266ControllerWifi_tspWebServer(80);
WiFiClient ESP8266ControllerWifi_tspWebServer_client;
String ESP8266ControllerWifi_tspWebServer_client_buffer="";
String webSettingPageHeader1 = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<meta charset=\"utf-8\">\r\n<html>\r\n";
String webSettingPageFooterString = "ESP8266 - Разработано в программе FLProg (https://flprog.ru)";
String webSettingPageHeaderString = "ESP8266";
String _ESP8266WebInterfacePageButton_save = "<input type=\"submit\" class = \"buttonFlp\" value=\"Сохранить\"></form>";
String _ESP8266WebInterfacePageButton_reset = "<form action=\"\" method=\"POST\"><input type=\"hidden\" name=\"resetController\" value=\"reset\"><input type=\"submit\" class = \"buttonFlp\" value=\"Перезагрузить\"></form>";
String webSettingPageMainStyle = " .menu {float:left; padding: 1%; margin: 1%;width:16%; border: 1px solid black;border-radius: 8px;} .menuItem { font-weight: 600;font-family: 'Times New Roman', Times, serif;} .header { padding: 10px; left: 0px; right: 0px; top: 0px; background: #00FFFF; text-align: center;font-weight: 600;font-family: 'Times New Roman', Times, serif;font-size: 250%; } .content { float:right; width:78%; } .footer{ float:left; padding: 1%; width:98%; background: #00FFFF; margin-top: 1%; text-align: center;font-weight: 600;font-family: 'Times New Roman', Times, serif;font-size: 150%;}.buttonFlp {width:150px;border-radius:20px;background:#459DE5;color:#fff;font-size:12px;cursor:pointer;float:left; padding: 1%; margin: 1%;}.buttonFlp:hover{background:#358DE5;}.buttonFlp:focus{outline:none;}";
bool isNeededCommitESP8266EEprom = 0;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
bool _changeNumber1_Out = 0;
int _changeNumber1_OLV;
bool _trgrt4 = 0;
bool _trgrt4I = 0;
bool _stou14 = 0;
bool _stou2 = 0;
bool _trgrt3 = 0;
bool _trgrt3I = 0;
bool _stou9 = 0;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _trgrt10 = 0;
bool _trgrt10I = 0;
bool _stou8 = 0;
bool _stou5 = 0;
bool _trgrt5 = 0;
bool _trgrt5I = 0;
bool _stou7 = 0;
bool _stou1 = 0;
bool _trgrt8 = 0;
bool _trgrt8I = 0;
bool _stou11 = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _changeNumber2_Out = 0;
int _changeNumber2_OLV;
bool _stou6 = 0;
bool _trgrt7 = 0;
bool _trgrt7I = 0;
bool _trgrt9 = 0;
bool _trgrt9I = 0;
bool _stou13 = 0;
bool _stou10 = 0;
bool _trgrt14 = 0;
bool _trgrt14I = 0;
bool _stou3 = 0;
bool _stou4 = 0;
bool _trgrt11 = 0;
bool _trgrt11I = 0;
bool _gen2I = 0;
bool _gen2O = 0;
unsigned long _gen2P = 0UL;
bool _trgrt6 = 0;
bool _trgrt6I = 0;
bool _trgrt13 = 0;
bool _trgrt13I = 0;
bool _SysParSave_1_OldSt = 0;
void setup()
{
EEPROM.begin(168);
if(((readByteFromEEPROM(0, 0, 0x0))) != 252) {
(updateByteToEEPROM(0, 0, 0x0, (252)));
(updateBooleanToEEPROM(1, 0, 0x0, (0)));
(updateIntegerToEEPROM(2, 0, 0x0, (50)));
(updateUnsignedLongToEEPROM(4, 0, 0x0, (1519036608)));
(updateStringToEEPROM(8, 40, 0x0, ("GavigorWiFi-2.4")));
(updateStringToEEPROM(48, 40, 0x0, ("24061984")));
(updateStringToEEPROM(88, 40, 0x0, ("esp8266_MUZZON")));
(updateStringToEEPROM(128, 40, 0x0, ("87654321")));
EEPROM.commit();
}
ESP8266ControllerWifiClient_isDHCP = readBooleanFromEEPROM(1, 0, 0x0);
ESP8266_freeParam_4202586 = readIntegerFromEEPROM(2,0,0x0);
ESP8266ControllerWifiClient_ip = _ipAddressFromUnsignetLong(readUnsignedLongFromEEPROM(4, 0, 0x0));
(readStingFromEEPROM(8, 40, 0x0)).toCharArray(ESP8266ControllerWifiClient_SSID, 40);
(readStingFromEEPROM(48, 40, 0x0)).toCharArray(ESP8266ControllerWifiClient_password, 40);
_OtaUpdater_Name = readStingFromEEPROM(88, 40, 0x0);
_OtaUpdater_Password = readStingFromEEPROM(128, 40, 0x0);
char _otaUpdaterNameBuffer[40];
_OtaUpdater_Name.toCharArray(_otaUpdaterNameBuffer, 40);
if(_OtaUpdater_Name.length() > 0){ArduinoOTA.setHostname (_otaUpdaterNameBuffer);}
char _otaUpdaterPasswordBuffer[40];
_OtaUpdater_Password.toCharArray(_otaUpdaterPasswordBuffer, 40);
if(_OtaUpdater_Password.length() > 0){ArduinoOTA.setPassword(_otaUpdaterPasswordBuffer);}
ArduinoOTA.begin();
WiFi.mode(WIFI_STA);
_esp8266WifiModuleClientReconnect();
ESP8266ControllerWifi_tspWebServer.begin();
_modbusSlaveTCPServer.begin();
satrtWachDogTimer();
Serial.begin(9600, SERIAL_8N1);
pinMode(15, INPUT);
pinMode(13, INPUT);
}
void loop()
{
bool _tempVariable_bool;
int _tempVariable_int;
_modbusSlavePoll();
_PWDC = 0;
ESP8266ControllerWifi_tspWebServer_client = ESP8266ControllerWifi_tspWebServer.available();
if (ESP8266ControllerWifi_tspWebServer_client) {
String _WSCReqest="";
int _WSCPageNumber=0;
delay(5);
while (ESP8266ControllerWifi_tspWebServer_client.available())
{
_WSCReqest.concat(char(ESP8266ControllerWifi_tspWebServer_client.read()));
}
ESP8266ControllerWifi_tspWebServer_client.flush();
_WSCPageNumber = _parseWebServerReqest(_WSCReqest);
_sendWebServerPage(_WSCPageNumber);
}
if (isNeededCommitESP8266EEprom) { EEPROM.commit(); isNeededCommitESP8266EEprom=0; }
if(ESP8266ControllerWifi_isNeededRestsrt) {ESP.restart();}
if(ESP8266ControllerWifiClient_IsNeedReconect) {_esp8266WifiModuleClientReconnect(); ESP8266ControllerWifiClient_IsNeedReconect = 0; }
ArduinoOTA.handle();
ESP8266ControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
if (ESP8266ControllerWifiClient_status) { if ( ! ESP8266ControllerWifiClient_HRD) { ESP8266ControllerWifiClient_ip = WiFi.localIP();
ESP8266ControllerWifiClient_subnet = WiFi.subnetMask();
ESP8266ControllerWifiClient_gateway = WiFi.gatewayIP();
ESP8266ControllerWifiClient_dns = WiFi.dnsIP();
WiFi.macAddress(ESP8266ControllerWifiClient_mac);
ESP8266ControllerWifiClient_HRD = 1;
}} else {ESP8266ControllerWifiClient_HRD = 0;}
//Плата:1
//Наименование:вкл-выкл
if ((_modbusSlaveDataTable_0[0])) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if (_trgrt1){if (!_stou5){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(0, HEX))))); _stou5=1;}} else {_stou5=0;}
//Плата:2
//Наименование:громкость +
_tempVariable_bool = (_modbusSlaveDataTable_0[4]);
_modbusSlaveDataTable_0[13] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[4])) { if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0;}
if (_gen2I) { if ( _isTimer ( _gen2P , ESP8266_freeParam_4202586 )) { _gen2P = millis(); _gen2O = ! _gen2O;}}
if (_gen2O) { if (_trgrt4I) { _trgrt4 = 0;} else {_trgrt4 = 1; _trgrt4I = 1;} } else {_trgrt4 = 0; _trgrt4I = 0;};
if (_trgrt4){if (!_stou3){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(3, HEX))))); _stou3=1;}} else {_stou3=0;}
//Плата:3
//Наименование:громкость -
_tempVariable_bool = (_modbusSlaveDataTable_0[3]);
_modbusSlaveDataTable_0[14] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[3])) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
if (_gen1I) { if ( _isTimer ( _gen1P , ESP8266_freeParam_4202586 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
if (_gen1O) { if (_trgrt5I) { _trgrt5 = 0;} else {_trgrt5 = 1; _trgrt5I = 1;} } else {_trgrt5 = 0; _trgrt5I = 0;};
if (_trgrt5){if (!_stou2){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(4, HEX))))); _stou2=1;}} else {_stou2=0;}
//Плата:4
//Наименование:радио
if ((_modbusSlaveDataTable_0[2])) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
if (_trgrt3){if (!_stou1){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(9, HEX))))); _stou1=1;}} else {_stou1=0;}
//Плата:5
//Наименование:ПК
if ((_modbusSlaveDataTable_0[1])) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;};
if (_trgrt2){if (!_stou4){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(6, HEX))))); _stou4=1;}} else {_stou4=0;}
//Плата:6
//Наименование:mute
if ((_modbusSlaveDataTable_0[5])) { if (_trgrt6I) { _trgrt6 = 0;} else {_trgrt6 = 1; _trgrt6I = 1;} } else {_trgrt6 = 0; _trgrt6I = 0;};
if (_trgrt6){if (!_stou6){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(1, HEX))))); _stou6=1;}} else {_stou6=0;}
//Плата:7
//Наименование:TV
if ((_modbusSlaveDataTable_0[6])) { if (_trgrt7I) { _trgrt7 = 0;} else {_trgrt7 = 1; _trgrt7I = 1;} } else {_trgrt7 = 0; _trgrt7I = 0;};
if (_trgrt7){if (!_stou7){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(7, HEX))))); _stou7=1;}} else {_stou7=0;}
//Плата:8
//Наименование:блютус
if ((_modbusSlaveDataTable_0[7])) { if (_trgrt8I) { _trgrt8 = 0;} else {_trgrt8 = 1; _trgrt8I = 1;} } else {_trgrt8 = 0; _trgrt8I = 0;};
if (_trgrt8){if (!_stou8){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(8, HEX))))); _stou8=1;}} else {_stou8=0;}
//Плата:9
//Наименование:фм след
_tempVariable_bool = (_modbusSlaveDataTable_0[8]);
_modbusSlaveDataTable_0[15] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[8])) { if (_trgrt9I) { _trgrt9 = 0;} else {_trgrt9 = 1; _trgrt9I = 1;} } else {_trgrt9 = 0; _trgrt9I = 0;};
if (_trgrt9){if (!_stou9){Serial.println(((String("RC")) + (String(" ")) + ((String(1, HEX))) + ((String(1, HEX))))); _stou9=1;}} else {_stou9=0;}
//Плата:10
//Наименование:фм пред
_tempVariable_bool = (_modbusSlaveDataTable_0[9]);
_modbusSlaveDataTable_0[16] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[9])) { if (_trgrt10I) { _trgrt10 = 0;} else {_trgrt10 = 1; _trgrt10I = 1;} } else {_trgrt10 = 0; _trgrt10I = 0;};
if (_trgrt10){if (!_stou10){Serial.println(((String("RC")) + (String(" ")) + ((String(1, HEX))) + ((String(2, HEX))))); _stou10=1;}} else {_stou10=0;}
//Плата:11
//Наименование:параметры
if ((_modbusSlaveDataTable_0[10])) { if (_trgrt13I) { _trgrt13 = 0;} else {_trgrt13 = 1; _trgrt13I = 1;} } else {_trgrt13 = 0; _trgrt13I = 0;};
if (_trgrt13){if (!_stou13){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(2, HEX))))); _stou13=1;}} else {_stou13=0;}
//Плата:12
//Наименование:спектр
if ((_modbusSlaveDataTable_0[11])) { if (_trgrt11I) { _trgrt11 = 0;} else {_trgrt11 = 1; _trgrt11I = 1;} } else {_trgrt11 = 0; _trgrt11I = 0;};
if (_trgrt11){if (!_stou11){Serial.println(((String("RC")) + (String(" ")) + ((String(2, HEX))) + ((String(5, HEX))))); _stou11=1;}} else {_stou11=0;}
//Плата:13
//Наименование:таймер
if ((_modbusSlaveDataTable_0[12])) { if (_trgrt14I) { _trgrt14 = 0;} else {_trgrt14 = 1; _trgrt14I = 1;} } else {_trgrt14 = 0; _trgrt14I = 0;};
if (_trgrt14){if (!_stou14){Serial.println(((String("RC")) + (String(" ")) + ((String(2, HEX))) + ((String(2, HEX))))); _stou14=1;}} else {_stou14=0;}
//Плата:14
if (_changeNumber1_Out) {_changeNumber1_Out = 0;} else {_tempVariable_int = (_modbusSlaveDataTable_4[0]);
if (_tempVariable_int != _changeNumber1_OLV) {_changeNumber1_OLV = _tempVariable_int; _changeNumber1_Out = 1;}
}
if(_changeNumber1_Out) {
if( ! _SysParSave_1_OldSt) {
_SysParSave_1_OldSt = 1;
ESP8266_freeParam_4202586 = (_modbusSlaveDataTable_4[0]);
updateIntegerToEEPROM(2,0 , 0x0,( ESP8266_freeParam_4202586));
}} else {
_SysParSave_1_OldSt = 0;}
if (_changeNumber2_Out) {_changeNumber2_Out = 0;} else {_tempVariable_int = ESP8266_freeParam_4202586;
if (_tempVariable_int != _changeNumber2_OLV) {_changeNumber2_OLV = _tempVariable_int; _changeNumber2_Out = 1;}
}
if (_changeNumber2_Out){
_tempVariable_int = ESP8266_freeParam_4202586;
_modbusSlaveDataTable_4[0] = _tempVariable_int;
}
//Плата:15
_tempVariable_int = (byte( (digitalRead (15))));
_modbusSlaveDataTable_4[1] = _tempVariable_int;
_tempVariable_int = (byte( (digitalRead (13))));
_modbusSlaveDataTable_4[2] = _tempVariable_int;
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
void wachDogTimerTick(void *pArg) {
if (_PWDC >= 100){ ESP.reset(); }else{_PWDC = _PWDC+1;}
}
void satrtWachDogTimer(void ) {
os_timer_setfn(&watchDogTimer, wachDogTimerTick, NULL);
os_timer_arm(&watchDogTimer, 100, true);
}
byte _modbusSlavePoll()
{
if( !_modbusSlaveTCPClient.connected()) {_modbusSlaveTCPClient = _modbusSlaveTCPServer.available();}
if (_modbusSlaveTCPClient) { _modbusGetSlaveRxBuffer();} else{return 0;}
if(_modbusSlaveBufferSize ==0) {return 0;}
if ((_modbusSlaveBuffer[0] != 1) && (_modbusSlaveBuffer[0] != 0)) return 0;
byte exception = _modbusValidateRequest();
if (exception > 0) {
if (exception != 255) { _modbusSlaveBuildException( exception );
_modbusSlaveSendTxBuffer();
}
return exception;
}
switch ( _modbusSlaveBuffer[1] ) {
case 1 :
return process_modbus_FC1(0);
break;
case 5:
return process_modbus_FC5();
break;
case 15:
return process_modbus_FC15();
break;
case 3 :
return process_modbus_FC3(4);
break;
case 6 :
return process_modbus_FC6();
break;
case 16 :
return process_modbus_FC16();
break;
default:
break;
}
return 25;
}
byte _modbusValidateRequest() {
boolean isSupported = false;
for (uint8_t i = 0; i < sizeof( _modbusSlave_fctsupported ); i++) {
if (_modbusSlave_fctsupported == _modbusSlaveBuffer[1]) {
isSupported = 1;
break;
}
}
if (!isSupported) { return 1;}
int intRegs = 0;
byte byteRegs;
switch ( _modbusSlaveBuffer[1] ) {
case 1:
if(!(checkModbusRange( word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]) , word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5]) ,0))){return 2;}
break;
case 5:
if(!(checkModbusAddres( word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]),0))){return 2;}
break;
case 15 :
if(!(checkModbusRange(word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]) , word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5]) ,0))){return 2;}
break;
case 6 :
if(!(checkModbusAddres(( word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]) ),4))){return 2;}
break;
case 3 :
case 16 :
if(!(checkModbusRange((word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3])), (word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5])),4))){return 2;}
break;
}
return 0; // OK, no exception code thrown
}
bool checkModbusAddres(int addr, byte table)
{
return (!(( modbusSlaveIndexForAddres(addr,table)) == -1));
}
int modbusSlaveIndexForAddres(int addr, byte table)
{
int tableSize = 0;
switch (table) {
case 0:
tableSize = 17;
break;
case 4:
tableSize = 3;
break;
}
for (byte i = 0; i < tableSize; i++) {if((modbusSlaveAddresFromIndex(i,table)) == addr){return i;}}
return -1;
}
int modbusSlaveAddresFromIndex(byte index, byte table)
{
switch (table) {
case 0:
return _modbusSlaveAddresTable_0[index];
break;
case 4:
return _modbusSlaveAddresTable_4[index];
break;
}
return -1;
}
bool checkModbusRange(int startAddr, int addrNumber, byte table)
{
for (int i=0; i < addrNumber; i++) {if(!(checkModbusAddres((startAddr+i),table))){return false;}}
return true;
}
void _modbusSlaveBuildException( byte exception ) {
byte func = _modbusSlaveBuffer[1];
_modbusSlaveBuffer[0] = 1;
_modbusSlaveBuffer[1] = func + 0x80;
_modbusSlaveBuffer[ 2 ] = exception;
_modbusSlaveBufferSize = 3;}
void _modbusSlaveSendTxBuffer()
{
if(_modbusSlaveBuffer[0] == 0) {_modbusSlaveTCPClient.stop();return;}
String stringBuffer = "";
_modbusSlaveMBAPBuffer[4] = highByte(_modbusSlaveBufferSize);
_modbusSlaveMBAPBuffer[5] = lowByte(_modbusSlaveBufferSize);
for (int i=0; i <6; i++){stringBuffer.concat(char( _modbusSlaveMBAPBuffer ));}
for (int i=0; i <_modbusSlaveBufferSize; i++){stringBuffer.concat(char( _modbusSlaveBuffer));}
_modbusSlaveTCPClient.print(stringBuffer);
_modbusSlaveBufferSize = 0;
}
byte _modbusGetSlaveRxBuffer()
{
byte currentByte = 0;
boolean bBuffOverflow = false;
byte currentByteIndex = 0;
_modbusSlaveBufferSize = 0;
while (_modbusSlaveTCPClient.available() ) {currentByte = _modbusSlaveTCPClient.read();
if (currentByteIndex < 6)
{_modbusSlaveMBAPBuffer[currentByteIndex] = currentByte; }
else
{
_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = currentByte;
_modbusSlaveBufferSize ++;
if (_modbusSlaveBufferSize >= 64) bBuffOverflow = true;}
currentByteIndex++;
}
if (bBuffOverflow) {return -3; }
return _modbusSlaveBufferSize;
}
byte process_modbus_FC1(byte table)
{
byte bytesNo, bitsNo;
int currentCoil, coil;
bool value;
byte index;
int startCoil = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[ 3] );
int coilNo = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
bytesNo = byte(coilNo /
;
if (coilNo % 8 != 0) bytesNo ++;
_modbusSlaveBuffer[2] = bytesNo;
_modbusSlaveBufferSize = 3;
bitsNo = 0;
for (currentCoil = 0; currentCoil < coilNo; currentCoil++) {
coil = startCoil + currentCoil;
index = modbusSlaveIndexForAddres(coil, table);
if (table == 0) {value = _modbusSlaveDataTable_0[index]; }
bitWrite(
_modbusSlaveBuffer[ _modbusSlaveBufferSize ],
bitsNo,
value);
bitsNo ++;
if (bitsNo > 7) {
bitsNo = 0;
_modbusSlaveBufferSize++;
}
}
if (coilNo % 8 != 0) _modbusSlaveBufferSize ++;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC3(byte table)
{
int startAddr = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
int byteRegsno = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
int i;
int value;
byte index;
_modbusSlaveBuffer[ 2 ] = byteRegsno * 2;
_modbusSlaveBufferSize = 3;
for (i = startAddr; i < startAddr + byteRegsno; i++) {
index = modbusSlaveIndexForAddres(i, table);
if (table == 4) {value = _modbusSlaveDataTable_4[index]; }
_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = highByte(value);
_modbusSlaveBufferSize++;
_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = lowByte(value);
_modbusSlaveBufferSize++;
}
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC5()
{
byte index;
int coil = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
index = modbusSlaveIndexForAddres(coil, 0);
_modbusSlaveDataTable_0[index] = (_modbusSlaveBuffer[4] == 0xff );
_modbusSlaveBufferSize = 6;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC15( )
{
byte frameByte, bitsNo;
byte currentCoil, coil;
byte index;
int startCoil = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
int coilNo = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
bitsNo = 0;
frameByte = 7;
for (currentCoil = 0; currentCoil < coilNo; currentCoil++) {
coil = startCoil + currentCoil;
index = modbusSlaveIndexForAddres(coil, 0);
_modbusSlaveDataTable_0[index] = bitRead( _modbusSlaveBuffer[ frameByte ], bitsNo );
bitsNo ++;
if (bitsNo > 7) {
bitsNo = 0;
frameByte++;
}
}
_modbusSlaveBufferSize = 6;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC6()
{
int addres = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
int index;
index = modbusSlaveIndexForAddres(addres, 4);
_modbusSlaveDataTable_4[index] =word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
_modbusSlaveBufferSize = 6;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC16( )
{
byte func = _modbusSlaveBuffer[1];
int startAddr = _modbusSlaveBuffer[2] << 8 | _modbusSlaveBuffer[3];
int byteRegsno = _modbusSlaveBuffer[4] << 8 | _modbusSlaveBuffer[5];
int i;
int index;
_modbusSlaveBuffer[4] = 0;
_modbusSlaveBuffer[5] = byteRegsno;
_modbusSlaveBufferSize = 6;
for (i = 0; i < byteRegsno; i++) {
index = modbusSlaveIndexForAddres((startAddr+i), 4);
_modbusSlaveDataTable_4[index] =word( _modbusSlaveBuffer[ 7 + i * 2 ], _modbusSlaveBuffer[8 + i * 2 ]);
}
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize +2;
}
void _sendWebServerPage(int sendPageNumber)
{
if (sendPageNumber == -1) {
return;
}
if (sendPageNumber ==1) {_sendWebServerPage1(); return; }
_sendWebServerSend404Page();
}
void _sendWebServerSend404Page(void)
{
ESP8266ControllerWifi_tspWebServer_client.print("HTTP/1.0 404 Not Found\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML><html><body><p>404 - Page not fond</p></body></html>\r\n");
delay(1);
ESP8266ControllerWifi_tspWebServer_client.flush();
ESP8266ControllerWifi_tspWebServer_client.stop();
}
int _parseWebServerReqest(String reqestAddres)
{
int index;
int result=0;
if ((reqestAddres.indexOf("POST")) == 0) {
_parsePostWebServerReqest(reqestAddres);
return -1;
}
index=reqestAddres.indexOf("/");
reqestAddres =reqestAddres.substring(index+1);
index=reqestAddres.indexOf(" ");
reqestAddres =reqestAddres.substring(0, index);
if (reqestAddres==""){result= 1;}
return result;
}
void _parsePostWebServerReqest(String reqestAddres)
{
int index = reqestAddres.indexOf("\r\n\r\n");
String paramsValue;
String params = reqestAddres.substring(index + 4);
while (params.length() > 0) {
index = params.indexOf("&");
if (index == -1) {
paramsValue = params;
params = "";
} else {
paramsValue = params.substring(0, index) ;
params = params.substring(index + 1) ;
}
_processingPostWebServerReqestData(paramsValue);
}
index = reqestAddres.indexOf("Referer:");
paramsValue = reqestAddres.substring(index +
;
index = paramsValue.indexOf("\r");
paramsValue = paramsValue.substring(0 , index);
params = "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML><html><head> <script type=\"text/javascript\">document.location.replace(\"";
params = params + paramsValue;
params = params + "\");</script></head><body></body></html>\r\n";
ESP8266ControllerWifi_tspWebServer_client.print(params);
delay(1);
ESP8266ControllerWifi_tspWebServer_client.flush();
ESP8266ControllerWifi_tspWebServer_client.stop();
}
void _processingPostWebServerReqestData(String paramData)
{
byte index=paramData.indexOf("=");
if(index<0){return;}
String key = paramData.substring(0,index);
String value = convertPostData(paramData.substring(index+1));
if (key.equals(String("resetController"))) {ESP8266ControllerWifi_isNeededRestsrt = 1; return;}
if (key.equals(String("parSetPage5131609E"))) { if (checkIPAdressString(value)) {
if ((_unsignetLongFromIPAdress(_ipAddressFromString(value))) != (_unsignetLongFromIPAdress(ESP8266ControllerWifiClient_ip))) {
ESP8266ControllerWifiClient_IsNeedReconect =1;
ESP8266ControllerWifiClient_ip.fromString(value);
updateUnsignedLongToEEPROM(4, 0, 0x0, (_unsignetLongFromIPAdress(ESP8266ControllerWifiClient_ip)));
}}
}
if (key.equals(String("parSetPage186902281E"))) {if ( ! (value.equals(String(ESP8266ControllerWifiClient_SSID)))) {
ESP8266ControllerWifiClient_IsNeedReconect =1;
value.toCharArray(ESP8266ControllerWifiClient_SSID, 40);
updateStringToEEPROM(8, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage260890144E"))) {if ( ! (value.equals(String(ESP8266ControllerWifiClient_password)))) {
ESP8266ControllerWifiClient_IsNeedReconect =1;
value.toCharArray(ESP8266ControllerWifiClient_password, 40);
updateStringToEEPROM(48, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage103625498E"))) {if(ESP8266ControllerWifiClient_isDHCP != (value.equals(String("on")))) {;ESP8266ControllerWifiClient_isDHCP = value.equals(String("on"));
ESP8266ControllerWifiClient_IsNeedReconect =1;
updateBooleanToEEPROM(1, 0, 0x0, ESP8266ControllerWifiClient_isDHCP);
}
}
if (key.equals(String("parSetPage115327664E"))) {if ( ! (value.equals(_OtaUpdater_Name))) {
_OtaUpdater_Name = value;
updateStringToEEPROM(88, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage241386574E"))) {if ( ! (value.equals(_OtaUpdater_Password))) {
_OtaUpdater_Password = value;
updateStringToEEPROM(128, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage233353492E"))) {ESP8266_freeParam_4202586 = value.toInt();
updateIntegerToEEPROM(2,0 , 0x0, ESP8266_freeParam_4202586);}
}
String convertPostData(String value)
{
String result = "";
char symbol;
byte code;
int i = 0;
String codeString;
while (i < value.length()) {
symbol = value.charAt(i);
if (symbol == '+') {
result.concat(' ');
} else {
if (symbol == '%')
{
codeString="";
i++;
codeString.concat(value);
i++;
codeString.concat(value);
code = hexStrToInt(codeString);
Serial.println(codeString);
Serial.println(code,HEX);
result.concat(char(code));
} else {
result.concat(symbol);
}
}
i++;
}
return result;
}
void _sendWebServerPage1(void)
{
printToClient(webSettingPageHeader1, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<head>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<head><style>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient((webSettingPageMainStyle+" "), &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("\"</style>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</head>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<body>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<div class=\"header\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(webSettingPageHeaderString, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</div>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<div class=\"content\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<form action=\"\" method=\"POST\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "время переключения громкости (мсек) (Integer)", String(ESP8266_freeParam_4202586, DEC), "parSetPage233353492E", "20", 0, 0)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "Обновление прошивки по WiFi (OTA) - Имя устройства", _OtaUpdater_Name, "parSetPage115327664E", "20", 0, 0)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "Обновление прошивки по WiFi (OTA) - Пароль", _OtaUpdater_Password, "parSetPage241386574E", "20", 0, 0)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "WiFi клиент - Имя сети (SSID)", ESP8266ControllerWifiClient_SSID, "parSetPage186902281E", "20", 0, 1)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "WiFi клиент - Пароль", ESP8266ControllerWifiClient_password, "parSetPage260890144E", "20", 0, 1)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "WiFi клиент - IP адрес", (ESP8266ControllerWifiClient_ip.toString()), "parSetPage5131609E", "20", 1, 1)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageCheckBoxVisualElement("", "WiFi клиент - Получение IP по DHCP", ESP8266ControllerWifiClient_isDHCP, "parSetPage103625498E")) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(_ESP8266WebInterfacePageButton_save, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(_ESP8266WebInterfacePageButton_reset, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</div>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<div class=\"footer\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(webSettingPageFooterString, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</div>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</body></html>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
commitClient(&ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
}
void printToClient(String value, WiFiClient* sendClient, String* sendBuffer)
{
for (int i = 0; i < value.length(); i++)
{
if (sendBuffer->length() > 800)
{
sendClient->print(*sendBuffer);
*sendBuffer = "";
}
sendBuffer->concat(value.charAt(i));
}
}
void commitClient(WiFiClient* sendClient, String* sendBuffer)
{
if ((sendBuffer->length()) > 0) {
sendClient->print(*sendBuffer);
}
*sendBuffer = "";
sendClient->flush();
sendClient->stop();
}
byte readByteFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
return EEPROM.read(addres);
}
void updateByteToEEPROM(int addres, byte bitAddres, byte chipAddres, byte value)
{
isNeededCommitESP8266EEprom = 1;
return EEPROM.write(addres, value);
}
bool readBooleanFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte temp = readByteFromEEPROM( addres, bitAddres, chipAddres);
return bitRead(temp, bitAddres);
}
void updateBooleanToEEPROM(int addres, byte bitAddres, byte chipAddres, bool value)
{
byte temp = readByteFromEEPROM( addres, bitAddres, chipAddres);
bitWrite(temp, bitAddres, value);
updateByteToEEPROM( addres, bitAddres, chipAddres, temp);
}
int readIntegerFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte hight = readByteFromEEPROM( addres, bitAddres, chipAddres);
byte low = readByteFromEEPROM( (addres+1), bitAddres, chipAddres);
return word(hight, low);
}
void updateIntegerToEEPROM(int addres, byte bitAddres, byte chipAddres, int value)
{
updateByteToEEPROM( addres, bitAddres, chipAddres, highByte(value));
updateByteToEEPROM( (addres+1), bitAddres, chipAddres, lowByte(value));
}
unsigned long readUnsignedLongFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte x[4];
for(byte i = 0; i < 4; i++) { x = readByteFromEEPROM( (addres+i), bitAddres, chipAddres);}
unsigned long *y = (unsigned long *)&x;
return y[0];
}
void updateUnsignedLongToEEPROM(int addres, byte bitAddres, byte chipAddres, unsigned long value)
{
byte *x = (byte *)&value;
for(byte i = 0; i < 4; i++) {updateByteToEEPROM( (addres+i), bitAddres, chipAddres, x);}
}
char readCharFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
return readByteFromEEPROM( addres, bitAddres, chipAddres);
}
void updateCharToEEPROM(int addres, byte bitAddres, byte chipAddres, char value)
{
updateByteToEEPROM( addres, bitAddres, chipAddres, value);
}
String readStingFromEEPROM(int addres, int dataLength, byte chipAddres)
{
String result = "";
char tempChar;
for (int i = 0; i < dataLength; i++) {
tempChar = readCharFromEEPROM((addres + i), 0, chipAddres);
if (byte(tempChar) == 0) {
return result;
}
result.concat(tempChar);
}
return result;
}
void updateStringToEEPROM(int addres, int dataLength, byte chipAddres, String value)
{
char tempChar;
for (int i = 0; i < dataLength; i++) {
if (i < value.length()) {
tempChar = value.charAt(i);
} else {
tempChar = char(0);
}
updateCharToEEPROM((addres + i), 0, chipAddres, tempChar);
}
}
String _eSP8266SettingWebPageAllVisualElementsHeader (String style, String label)
{
String result = "<div";
if (style.length() > 0) {
result.concat(" class=\"");
result.concat(style);
result.concat("\"");
}
result.concat("> <p>");
result.concat(label);
result.concat("<br>");
return result;
}
String _eSP8266SettingWebPageATextVisualElement (String style, String label, String value, bool isIP, bool isClient)
{
String result = _eSP8266SettingWebPageAllVisualElementsHeader (style, label);
if ( isClient && isIP && ESP8266ControllerWifiClient_isDHCP && (! ESP8266ControllerWifiClient_status)) {result.concat("??.??.??.??");} else {result.concat(value);}
result.concat("</p></div>");
return result;
}
String _eSP8266SettingWebPageInputFieldVisualElement (String style, String label, String value, String name, String maxlength, bool isIP, bool isClient)
{
if ( isClient && isIP && ESP8266ControllerWifiClient_isDHCP) { return _eSP8266SettingWebPageATextVisualElement (style, label, value, isIP, isClient);}
String result = _eSP8266SettingWebPageAllVisualElementsHeader (style, label);
result.concat("<input type=\"text\" name=\"");
result.concat(name);
result.concat( "\" value=\"");
result.concat(value);
result.concat("\" maxlength=\"");
result.concat( maxlength);
result.concat("\" ></p></div>");
return result;
}
String _eSP8266SettingWebPageCheckBoxVisualElement (String style, String label, bool value, String name)
{
String result = "<div";
if (style.length() > 0) {
result.concat("class=\"");
result.concat(style);
result.concat("\"");
}
result.concat("> <label><input type=\"checkbox\" id=\"");
result.concat(name);
result.concat("1\"");
if(value) { result.concat(" checked ");}
result.concat("/>");
result.concat(label);
result.concat("</label><input type=\"hidden\" name=\"");
result.concat(name);
result.concat("\" id=\"");
result.concat(name);
result.concat("2");
result.concat("\" value=\"");
if(value) {result.concat( "on");} else { result.concat( "off");}
result.concat( "\"><script> var el");
result.concat(name);
result.concat( " = document.querySelector('#");
result.concat(name);
result.concat("1");
result.concat("'); el");
result.concat(name);
result.concat( ".onclick = function() {if (el");
result.concat(name);
result.concat( ".checked) { document.getElementById('");
result.concat(name);
result.concat("2");
result.concat("').value ='on'; } else { document.getElementById('");
result.concat(name);
result.concat("2");
result.concat("').value ='off';}} </script> </div>");
return result;
}
int hexStrToInt(String instring)
{
byte len = instring.length();
if (len == 0) return 0;
int result = 0;
for (byte i = 0; i < 8; i++) // только первые 8 цыфар влезуть в uint32
{
char ch = instring;
if (ch == 0) break;
result <<= 4;
if (isdigit(ch))
result = result | (ch - '0');
else result = result | (ch - 'A' + 10);
}
return result;
}
void _esp8266WifiModuleClientReconnect()
{
if( _checkMacAddres(ESP8266ControllerWifiClient_mac)) { wifi_set_macaddr(0, const_cast<uint8*>(ESP8266ControllerWifiClient_mac));}
if( ESP8266ControllerWifiClient_isDHCP) { WiFi.config(0U, 0U, 0U, 0U, 0U); } else {
WiFi.config(ESP8266ControllerWifiClient_ip, ESP8266ControllerWifiClient_gateway, ESP8266ControllerWifiClient_subnet, ESP8266ControllerWifiClient_dns , ESP8266ControllerWifiClient_dns );
}
WiFi.begin(ESP8266ControllerWifiClient_SSID, ESP8266ControllerWifiClient_password);
}
IPAddress _ipAddressFromUnsignetLong(unsigned long value)
{
IPAddress result;
byte *x = (byte *)&value;
for (byte i = 0; i < 4; i++) {
result = x;
}
return result;
}
bool checkIPAdressString(String value)
{
IPAddress temp;
return temp.fromString(value);
}
IPAddress _ipAddressFromString(String value)
{
IPAddress temp;
temp.fromString(value);
return temp;
}
unsigned long _unsignetLongFromIPAdress(IPAddress value)
{
byte buufer[4] = {0, 0, 0, 0};
for (byte i = 0; i < 4; i++) {
buufer[i] = value[i];
}
unsigned long *y = (unsigned long *)&buufer;
return y[0];
}
bool _checkMacAddres(byte array[])
{
bool result = 0;
for (byte i = 0; i < 6; i++)
{
if (array[i] == 255) {
return 0;
}
if (array[i] > 0 ) {
result = 1;
}
}
return result;
}
WiseLord,
А Вас Благодарю за терпение и труд!
(даже с обратной связью для ON\OFF и MUTE и возможностью удаленного управления через KaScada_Cloud
+есть теперь возможность вывести на экран пульта температуру и напряжение (через esp8266, а не через МК)
-esp8266 (NodeMCU v.3) + KaScada HMI ModBus + FLProg 6.1.1
-принцип управления по UART, т.е. также как и версия для ПК
Пульт
Спойлер







Спойлер
Спойлер
Спойлер
#include <ESP8266WiFi.h>#include <WiFiUdp.h>
#include <ESP8266mDNS.h>
#include <EEPROM.h>
#include <ArduinoOTA.h>
extern "C" {
#include "user_interface.h";
}
bool _modbusSlaveDataTable_0[17];
int _modbusSlaveAddresTable_0[17] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 15, 16, 17, 18, 19};
int _modbusSlaveDataTable_4[3];
int _modbusSlaveAddresTable_4[3] = {0, 1, 2};
byte _modbusSlaveBufferSize = 0;
byte _modbusSlaveBuffer[64];
const unsigned char _modbusSlave_fctsupported[] = {1, 5, 15, 3, 6, 16};
WiFiServer _modbusSlaveTCPServer(502);
WiFiClient _modbusSlaveTCPClient;
byte _modbusSlaveMBAPBuffer[6];
extern "C" {
#include "user_interface.h"
}
os_timer_t watchDogTimer;
int _PWDC = 0;
bool ESP8266ControllerWifiClient_HRD = 0;
bool ESP8266ControllerWifiClient_status = 1;
bool ESP8266ControllerWifiClient_isDHCP = 0;
bool ESP8266ControllerWifiClient_IsNeedReconect = 0;
bool ESP8266ControllerWifiClient_workStatus = 1;
char ESP8266ControllerWifiClient_SSID[40] = "GavigorWiFi-2.4";
char ESP8266ControllerWifiClient_password[40] = "24061984";
IPAddress ESP8266ControllerWifiClient_ip(192, 168, 138, 90);
IPAddress ESP8266ControllerWifiClient_dns (192, 168, 138, 1);
IPAddress ESP8266ControllerWifiClient_gateway (192, 168, 138, 1);
IPAddress ESP8266ControllerWifiClient_subnet (255, 255, 255, 0);
uint8_t ESP8266ControllerWifiClient_mac[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
bool ESP8266ControllerWifi_isNeededRestsrt= 0;
String _OtaUpdater_Name = "esp8266_MUZZON" ;
int ESP8266_freeParam_4202586 = 50 ;
String _OtaUpdater_Password = "87654321" ;
WiFiServer ESP8266ControllerWifi_tspWebServer(80);
WiFiClient ESP8266ControllerWifi_tspWebServer_client;
String ESP8266ControllerWifi_tspWebServer_client_buffer="";
String webSettingPageHeader1 = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<meta charset=\"utf-8\">\r\n<html>\r\n";
String webSettingPageFooterString = "ESP8266 - Разработано в программе FLProg (https://flprog.ru)";
String webSettingPageHeaderString = "ESP8266";
String _ESP8266WebInterfacePageButton_save = "<input type=\"submit\" class = \"buttonFlp\" value=\"Сохранить\"></form>";
String _ESP8266WebInterfacePageButton_reset = "<form action=\"\" method=\"POST\"><input type=\"hidden\" name=\"resetController\" value=\"reset\"><input type=\"submit\" class = \"buttonFlp\" value=\"Перезагрузить\"></form>";
String webSettingPageMainStyle = " .menu {float:left; padding: 1%; margin: 1%;width:16%; border: 1px solid black;border-radius: 8px;} .menuItem { font-weight: 600;font-family: 'Times New Roman', Times, serif;} .header { padding: 10px; left: 0px; right: 0px; top: 0px; background: #00FFFF; text-align: center;font-weight: 600;font-family: 'Times New Roman', Times, serif;font-size: 250%; } .content { float:right; width:78%; } .footer{ float:left; padding: 1%; width:98%; background: #00FFFF; margin-top: 1%; text-align: center;font-weight: 600;font-family: 'Times New Roman', Times, serif;font-size: 150%;}.buttonFlp {width:150px;border-radius:20px;background:#459DE5;color:#fff;font-size:12px;cursor:pointer;float:left; padding: 1%; margin: 1%;}.buttonFlp:hover{background:#358DE5;}.buttonFlp:focus{outline:none;}";
bool isNeededCommitESP8266EEprom = 0;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
bool _changeNumber1_Out = 0;
int _changeNumber1_OLV;
bool _trgrt4 = 0;
bool _trgrt4I = 0;
bool _stou14 = 0;
bool _stou2 = 0;
bool _trgrt3 = 0;
bool _trgrt3I = 0;
bool _stou9 = 0;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _trgrt10 = 0;
bool _trgrt10I = 0;
bool _stou8 = 0;
bool _stou5 = 0;
bool _trgrt5 = 0;
bool _trgrt5I = 0;
bool _stou7 = 0;
bool _stou1 = 0;
bool _trgrt8 = 0;
bool _trgrt8I = 0;
bool _stou11 = 0;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _changeNumber2_Out = 0;
int _changeNumber2_OLV;
bool _stou6 = 0;
bool _trgrt7 = 0;
bool _trgrt7I = 0;
bool _trgrt9 = 0;
bool _trgrt9I = 0;
bool _stou13 = 0;
bool _stou10 = 0;
bool _trgrt14 = 0;
bool _trgrt14I = 0;
bool _stou3 = 0;
bool _stou4 = 0;
bool _trgrt11 = 0;
bool _trgrt11I = 0;
bool _gen2I = 0;
bool _gen2O = 0;
unsigned long _gen2P = 0UL;
bool _trgrt6 = 0;
bool _trgrt6I = 0;
bool _trgrt13 = 0;
bool _trgrt13I = 0;
bool _SysParSave_1_OldSt = 0;
void setup()
{
EEPROM.begin(168);
if(((readByteFromEEPROM(0, 0, 0x0))) != 252) {
(updateByteToEEPROM(0, 0, 0x0, (252)));
(updateBooleanToEEPROM(1, 0, 0x0, (0)));
(updateIntegerToEEPROM(2, 0, 0x0, (50)));
(updateUnsignedLongToEEPROM(4, 0, 0x0, (1519036608)));
(updateStringToEEPROM(8, 40, 0x0, ("GavigorWiFi-2.4")));
(updateStringToEEPROM(48, 40, 0x0, ("24061984")));
(updateStringToEEPROM(88, 40, 0x0, ("esp8266_MUZZON")));
(updateStringToEEPROM(128, 40, 0x0, ("87654321")));
EEPROM.commit();
}
ESP8266ControllerWifiClient_isDHCP = readBooleanFromEEPROM(1, 0, 0x0);
ESP8266_freeParam_4202586 = readIntegerFromEEPROM(2,0,0x0);
ESP8266ControllerWifiClient_ip = _ipAddressFromUnsignetLong(readUnsignedLongFromEEPROM(4, 0, 0x0));
(readStingFromEEPROM(8, 40, 0x0)).toCharArray(ESP8266ControllerWifiClient_SSID, 40);
(readStingFromEEPROM(48, 40, 0x0)).toCharArray(ESP8266ControllerWifiClient_password, 40);
_OtaUpdater_Name = readStingFromEEPROM(88, 40, 0x0);
_OtaUpdater_Password = readStingFromEEPROM(128, 40, 0x0);
char _otaUpdaterNameBuffer[40];
_OtaUpdater_Name.toCharArray(_otaUpdaterNameBuffer, 40);
if(_OtaUpdater_Name.length() > 0){ArduinoOTA.setHostname (_otaUpdaterNameBuffer);}
char _otaUpdaterPasswordBuffer[40];
_OtaUpdater_Password.toCharArray(_otaUpdaterPasswordBuffer, 40);
if(_OtaUpdater_Password.length() > 0){ArduinoOTA.setPassword(_otaUpdaterPasswordBuffer);}
ArduinoOTA.begin();
WiFi.mode(WIFI_STA);
_esp8266WifiModuleClientReconnect();
ESP8266ControllerWifi_tspWebServer.begin();
_modbusSlaveTCPServer.begin();
satrtWachDogTimer();
Serial.begin(9600, SERIAL_8N1);
pinMode(15, INPUT);
pinMode(13, INPUT);
}
void loop()
{
bool _tempVariable_bool;
int _tempVariable_int;
_modbusSlavePoll();
_PWDC = 0;
ESP8266ControllerWifi_tspWebServer_client = ESP8266ControllerWifi_tspWebServer.available();
if (ESP8266ControllerWifi_tspWebServer_client) {
String _WSCReqest="";
int _WSCPageNumber=0;
delay(5);
while (ESP8266ControllerWifi_tspWebServer_client.available())
{
_WSCReqest.concat(char(ESP8266ControllerWifi_tspWebServer_client.read()));
}
ESP8266ControllerWifi_tspWebServer_client.flush();
_WSCPageNumber = _parseWebServerReqest(_WSCReqest);
_sendWebServerPage(_WSCPageNumber);
}
if (isNeededCommitESP8266EEprom) { EEPROM.commit(); isNeededCommitESP8266EEprom=0; }
if(ESP8266ControllerWifi_isNeededRestsrt) {ESP.restart();}
if(ESP8266ControllerWifiClient_IsNeedReconect) {_esp8266WifiModuleClientReconnect(); ESP8266ControllerWifiClient_IsNeedReconect = 0; }
ArduinoOTA.handle();
ESP8266ControllerWifiClient_status = WiFi.status() == WL_CONNECTED;
if (ESP8266ControllerWifiClient_status) { if ( ! ESP8266ControllerWifiClient_HRD) { ESP8266ControllerWifiClient_ip = WiFi.localIP();
ESP8266ControllerWifiClient_subnet = WiFi.subnetMask();
ESP8266ControllerWifiClient_gateway = WiFi.gatewayIP();
ESP8266ControllerWifiClient_dns = WiFi.dnsIP();
WiFi.macAddress(ESP8266ControllerWifiClient_mac);
ESP8266ControllerWifiClient_HRD = 1;
}} else {ESP8266ControllerWifiClient_HRD = 0;}
//Плата:1
//Наименование:вкл-выкл
if ((_modbusSlaveDataTable_0[0])) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if (_trgrt1){if (!_stou5){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(0, HEX))))); _stou5=1;}} else {_stou5=0;}
//Плата:2
//Наименование:громкость +
_tempVariable_bool = (_modbusSlaveDataTable_0[4]);
_modbusSlaveDataTable_0[13] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[4])) { if (! _gen2I) { _gen2I = 1; _gen2O = 1; _gen2P = millis(); } } else { _gen2I = 0 ; _gen2O= 0;}
if (_gen2I) { if ( _isTimer ( _gen2P , ESP8266_freeParam_4202586 )) { _gen2P = millis(); _gen2O = ! _gen2O;}}
if (_gen2O) { if (_trgrt4I) { _trgrt4 = 0;} else {_trgrt4 = 1; _trgrt4I = 1;} } else {_trgrt4 = 0; _trgrt4I = 0;};
if (_trgrt4){if (!_stou3){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(3, HEX))))); _stou3=1;}} else {_stou3=0;}
//Плата:3
//Наименование:громкость -
_tempVariable_bool = (_modbusSlaveDataTable_0[3]);
_modbusSlaveDataTable_0[14] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[3])) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
if (_gen1I) { if ( _isTimer ( _gen1P , ESP8266_freeParam_4202586 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
if (_gen1O) { if (_trgrt5I) { _trgrt5 = 0;} else {_trgrt5 = 1; _trgrt5I = 1;} } else {_trgrt5 = 0; _trgrt5I = 0;};
if (_trgrt5){if (!_stou2){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(4, HEX))))); _stou2=1;}} else {_stou2=0;}
//Плата:4
//Наименование:радио
if ((_modbusSlaveDataTable_0[2])) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
if (_trgrt3){if (!_stou1){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(9, HEX))))); _stou1=1;}} else {_stou1=0;}
//Плата:5
//Наименование:ПК
if ((_modbusSlaveDataTable_0[1])) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;};
if (_trgrt2){if (!_stou4){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(6, HEX))))); _stou4=1;}} else {_stou4=0;}
//Плата:6
//Наименование:mute
if ((_modbusSlaveDataTable_0[5])) { if (_trgrt6I) { _trgrt6 = 0;} else {_trgrt6 = 1; _trgrt6I = 1;} } else {_trgrt6 = 0; _trgrt6I = 0;};
if (_trgrt6){if (!_stou6){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(1, HEX))))); _stou6=1;}} else {_stou6=0;}
//Плата:7
//Наименование:TV
if ((_modbusSlaveDataTable_0[6])) { if (_trgrt7I) { _trgrt7 = 0;} else {_trgrt7 = 1; _trgrt7I = 1;} } else {_trgrt7 = 0; _trgrt7I = 0;};
if (_trgrt7){if (!_stou7){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(7, HEX))))); _stou7=1;}} else {_stou7=0;}
//Плата:8
//Наименование:блютус
if ((_modbusSlaveDataTable_0[7])) { if (_trgrt8I) { _trgrt8 = 0;} else {_trgrt8 = 1; _trgrt8I = 1;} } else {_trgrt8 = 0; _trgrt8I = 0;};
if (_trgrt8){if (!_stou8){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(8, HEX))))); _stou8=1;}} else {_stou8=0;}
//Плата:9
//Наименование:фм след
_tempVariable_bool = (_modbusSlaveDataTable_0[8]);
_modbusSlaveDataTable_0[15] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[8])) { if (_trgrt9I) { _trgrt9 = 0;} else {_trgrt9 = 1; _trgrt9I = 1;} } else {_trgrt9 = 0; _trgrt9I = 0;};
if (_trgrt9){if (!_stou9){Serial.println(((String("RC")) + (String(" ")) + ((String(1, HEX))) + ((String(1, HEX))))); _stou9=1;}} else {_stou9=0;}
//Плата:10
//Наименование:фм пред
_tempVariable_bool = (_modbusSlaveDataTable_0[9]);
_modbusSlaveDataTable_0[16] = _tempVariable_bool;
if ((_modbusSlaveDataTable_0[9])) { if (_trgrt10I) { _trgrt10 = 0;} else {_trgrt10 = 1; _trgrt10I = 1;} } else {_trgrt10 = 0; _trgrt10I = 0;};
if (_trgrt10){if (!_stou10){Serial.println(((String("RC")) + (String(" ")) + ((String(1, HEX))) + ((String(2, HEX))))); _stou10=1;}} else {_stou10=0;}
//Плата:11
//Наименование:параметры
if ((_modbusSlaveDataTable_0[10])) { if (_trgrt13I) { _trgrt13 = 0;} else {_trgrt13 = 1; _trgrt13I = 1;} } else {_trgrt13 = 0; _trgrt13I = 0;};
if (_trgrt13){if (!_stou13){Serial.println(((String("RC")) + (String(" ")) + ((String(0, HEX))) + ((String(2, HEX))))); _stou13=1;}} else {_stou13=0;}
//Плата:12
//Наименование:спектр
if ((_modbusSlaveDataTable_0[11])) { if (_trgrt11I) { _trgrt11 = 0;} else {_trgrt11 = 1; _trgrt11I = 1;} } else {_trgrt11 = 0; _trgrt11I = 0;};
if (_trgrt11){if (!_stou11){Serial.println(((String("RC")) + (String(" ")) + ((String(2, HEX))) + ((String(5, HEX))))); _stou11=1;}} else {_stou11=0;}
//Плата:13
//Наименование:таймер
if ((_modbusSlaveDataTable_0[12])) { if (_trgrt14I) { _trgrt14 = 0;} else {_trgrt14 = 1; _trgrt14I = 1;} } else {_trgrt14 = 0; _trgrt14I = 0;};
if (_trgrt14){if (!_stou14){Serial.println(((String("RC")) + (String(" ")) + ((String(2, HEX))) + ((String(2, HEX))))); _stou14=1;}} else {_stou14=0;}
//Плата:14
if (_changeNumber1_Out) {_changeNumber1_Out = 0;} else {_tempVariable_int = (_modbusSlaveDataTable_4[0]);
if (_tempVariable_int != _changeNumber1_OLV) {_changeNumber1_OLV = _tempVariable_int; _changeNumber1_Out = 1;}
}
if(_changeNumber1_Out) {
if( ! _SysParSave_1_OldSt) {
_SysParSave_1_OldSt = 1;
ESP8266_freeParam_4202586 = (_modbusSlaveDataTable_4[0]);
updateIntegerToEEPROM(2,0 , 0x0,( ESP8266_freeParam_4202586));
}} else {
_SysParSave_1_OldSt = 0;}
if (_changeNumber2_Out) {_changeNumber2_Out = 0;} else {_tempVariable_int = ESP8266_freeParam_4202586;
if (_tempVariable_int != _changeNumber2_OLV) {_changeNumber2_OLV = _tempVariable_int; _changeNumber2_Out = 1;}
}
if (_changeNumber2_Out){
_tempVariable_int = ESP8266_freeParam_4202586;
_modbusSlaveDataTable_4[0] = _tempVariable_int;
}
//Плата:15
_tempVariable_int = (byte( (digitalRead (15))));
_modbusSlaveDataTable_4[1] = _tempVariable_int;
_tempVariable_int = (byte( (digitalRead (13))));
_modbusSlaveDataTable_4[2] = _tempVariable_int;
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
void wachDogTimerTick(void *pArg) {
if (_PWDC >= 100){ ESP.reset(); }else{_PWDC = _PWDC+1;}
}
void satrtWachDogTimer(void ) {
os_timer_setfn(&watchDogTimer, wachDogTimerTick, NULL);
os_timer_arm(&watchDogTimer, 100, true);
}
byte _modbusSlavePoll()
{
if( !_modbusSlaveTCPClient.connected()) {_modbusSlaveTCPClient = _modbusSlaveTCPServer.available();}
if (_modbusSlaveTCPClient) { _modbusGetSlaveRxBuffer();} else{return 0;}
if(_modbusSlaveBufferSize ==0) {return 0;}
if ((_modbusSlaveBuffer[0] != 1) && (_modbusSlaveBuffer[0] != 0)) return 0;
byte exception = _modbusValidateRequest();
if (exception > 0) {
if (exception != 255) { _modbusSlaveBuildException( exception );
_modbusSlaveSendTxBuffer();
}
return exception;
}
switch ( _modbusSlaveBuffer[1] ) {
case 1 :
return process_modbus_FC1(0);
break;
case 5:
return process_modbus_FC5();
break;
case 15:
return process_modbus_FC15();
break;
case 3 :
return process_modbus_FC3(4);
break;
case 6 :
return process_modbus_FC6();
break;
case 16 :
return process_modbus_FC16();
break;
default:
break;
}
return 25;
}
byte _modbusValidateRequest() {
boolean isSupported = false;
for (uint8_t i = 0; i < sizeof( _modbusSlave_fctsupported ); i++) {
if (_modbusSlave_fctsupported == _modbusSlaveBuffer[1]) {
isSupported = 1;
break;
}
}
if (!isSupported) { return 1;}
int intRegs = 0;
byte byteRegs;
switch ( _modbusSlaveBuffer[1] ) {
case 1:
if(!(checkModbusRange( word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]) , word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5]) ,0))){return 2;}
break;
case 5:
if(!(checkModbusAddres( word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]),0))){return 2;}
break;
case 15 :
if(!(checkModbusRange(word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]) , word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5]) ,0))){return 2;}
break;
case 6 :
if(!(checkModbusAddres(( word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3]) ),4))){return 2;}
break;
case 3 :
case 16 :
if(!(checkModbusRange((word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3])), (word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5])),4))){return 2;}
break;
}
return 0; // OK, no exception code thrown
}
bool checkModbusAddres(int addr, byte table)
{
return (!(( modbusSlaveIndexForAddres(addr,table)) == -1));
}
int modbusSlaveIndexForAddres(int addr, byte table)
{
int tableSize = 0;
switch (table) {
case 0:
tableSize = 17;
break;
case 4:
tableSize = 3;
break;
}
for (byte i = 0; i < tableSize; i++) {if((modbusSlaveAddresFromIndex(i,table)) == addr){return i;}}
return -1;
}
int modbusSlaveAddresFromIndex(byte index, byte table)
{
switch (table) {
case 0:
return _modbusSlaveAddresTable_0[index];
break;
case 4:
return _modbusSlaveAddresTable_4[index];
break;
}
return -1;
}
bool checkModbusRange(int startAddr, int addrNumber, byte table)
{
for (int i=0; i < addrNumber; i++) {if(!(checkModbusAddres((startAddr+i),table))){return false;}}
return true;
}
void _modbusSlaveBuildException( byte exception ) {
byte func = _modbusSlaveBuffer[1];
_modbusSlaveBuffer[0] = 1;
_modbusSlaveBuffer[1] = func + 0x80;
_modbusSlaveBuffer[ 2 ] = exception;
_modbusSlaveBufferSize = 3;}
void _modbusSlaveSendTxBuffer()
{
if(_modbusSlaveBuffer[0] == 0) {_modbusSlaveTCPClient.stop();return;}
String stringBuffer = "";
_modbusSlaveMBAPBuffer[4] = highByte(_modbusSlaveBufferSize);
_modbusSlaveMBAPBuffer[5] = lowByte(_modbusSlaveBufferSize);
for (int i=0; i <6; i++){stringBuffer.concat(char( _modbusSlaveMBAPBuffer ));}
for (int i=0; i <_modbusSlaveBufferSize; i++){stringBuffer.concat(char( _modbusSlaveBuffer));}
_modbusSlaveTCPClient.print(stringBuffer);
_modbusSlaveBufferSize = 0;
}
byte _modbusGetSlaveRxBuffer()
{
byte currentByte = 0;
boolean bBuffOverflow = false;
byte currentByteIndex = 0;
_modbusSlaveBufferSize = 0;
while (_modbusSlaveTCPClient.available() ) {currentByte = _modbusSlaveTCPClient.read();
if (currentByteIndex < 6)
{_modbusSlaveMBAPBuffer[currentByteIndex] = currentByte; }
else
{
_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = currentByte;
_modbusSlaveBufferSize ++;
if (_modbusSlaveBufferSize >= 64) bBuffOverflow = true;}
currentByteIndex++;
}
if (bBuffOverflow) {return -3; }
return _modbusSlaveBufferSize;
}
byte process_modbus_FC1(byte table)
{
byte bytesNo, bitsNo;
int currentCoil, coil;
bool value;
byte index;
int startCoil = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[ 3] );
int coilNo = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
bytesNo = byte(coilNo /
if (coilNo % 8 != 0) bytesNo ++;
_modbusSlaveBuffer[2] = bytesNo;
_modbusSlaveBufferSize = 3;
bitsNo = 0;
for (currentCoil = 0; currentCoil < coilNo; currentCoil++) {
coil = startCoil + currentCoil;
index = modbusSlaveIndexForAddres(coil, table);
if (table == 0) {value = _modbusSlaveDataTable_0[index]; }
bitWrite(
_modbusSlaveBuffer[ _modbusSlaveBufferSize ],
bitsNo,
value);
bitsNo ++;
if (bitsNo > 7) {
bitsNo = 0;
_modbusSlaveBufferSize++;
}
}
if (coilNo % 8 != 0) _modbusSlaveBufferSize ++;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC3(byte table)
{
int startAddr = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
int byteRegsno = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
int i;
int value;
byte index;
_modbusSlaveBuffer[ 2 ] = byteRegsno * 2;
_modbusSlaveBufferSize = 3;
for (i = startAddr; i < startAddr + byteRegsno; i++) {
index = modbusSlaveIndexForAddres(i, table);
if (table == 4) {value = _modbusSlaveDataTable_4[index]; }
_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = highByte(value);
_modbusSlaveBufferSize++;
_modbusSlaveBuffer[ _modbusSlaveBufferSize ] = lowByte(value);
_modbusSlaveBufferSize++;
}
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC5()
{
byte index;
int coil = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
index = modbusSlaveIndexForAddres(coil, 0);
_modbusSlaveDataTable_0[index] = (_modbusSlaveBuffer[4] == 0xff );
_modbusSlaveBufferSize = 6;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC15( )
{
byte frameByte, bitsNo;
byte currentCoil, coil;
byte index;
int startCoil = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
int coilNo = word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
bitsNo = 0;
frameByte = 7;
for (currentCoil = 0; currentCoil < coilNo; currentCoil++) {
coil = startCoil + currentCoil;
index = modbusSlaveIndexForAddres(coil, 0);
_modbusSlaveDataTable_0[index] = bitRead( _modbusSlaveBuffer[ frameByte ], bitsNo );
bitsNo ++;
if (bitsNo > 7) {
bitsNo = 0;
frameByte++;
}
}
_modbusSlaveBufferSize = 6;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC6()
{
int addres = word( _modbusSlaveBuffer[2], _modbusSlaveBuffer[3] );
int index;
index = modbusSlaveIndexForAddres(addres, 4);
_modbusSlaveDataTable_4[index] =word( _modbusSlaveBuffer[4], _modbusSlaveBuffer[5] );
_modbusSlaveBufferSize = 6;
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize + 2;
}
byte process_modbus_FC16( )
{
byte func = _modbusSlaveBuffer[1];
int startAddr = _modbusSlaveBuffer[2] << 8 | _modbusSlaveBuffer[3];
int byteRegsno = _modbusSlaveBuffer[4] << 8 | _modbusSlaveBuffer[5];
int i;
int index;
_modbusSlaveBuffer[4] = 0;
_modbusSlaveBuffer[5] = byteRegsno;
_modbusSlaveBufferSize = 6;
for (i = 0; i < byteRegsno; i++) {
index = modbusSlaveIndexForAddres((startAddr+i), 4);
_modbusSlaveDataTable_4[index] =word( _modbusSlaveBuffer[ 7 + i * 2 ], _modbusSlaveBuffer[8 + i * 2 ]);
}
_modbusSlaveSendTxBuffer();
return _modbusSlaveBufferSize +2;
}
void _sendWebServerPage(int sendPageNumber)
{
if (sendPageNumber == -1) {
return;
}
if (sendPageNumber ==1) {_sendWebServerPage1(); return; }
_sendWebServerSend404Page();
}
void _sendWebServerSend404Page(void)
{
ESP8266ControllerWifi_tspWebServer_client.print("HTTP/1.0 404 Not Found\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML><html><body><p>404 - Page not fond</p></body></html>\r\n");
delay(1);
ESP8266ControllerWifi_tspWebServer_client.flush();
ESP8266ControllerWifi_tspWebServer_client.stop();
}
int _parseWebServerReqest(String reqestAddres)
{
int index;
int result=0;
if ((reqestAddres.indexOf("POST")) == 0) {
_parsePostWebServerReqest(reqestAddres);
return -1;
}
index=reqestAddres.indexOf("/");
reqestAddres =reqestAddres.substring(index+1);
index=reqestAddres.indexOf(" ");
reqestAddres =reqestAddres.substring(0, index);
if (reqestAddres==""){result= 1;}
return result;
}
void _parsePostWebServerReqest(String reqestAddres)
{
int index = reqestAddres.indexOf("\r\n\r\n");
String paramsValue;
String params = reqestAddres.substring(index + 4);
while (params.length() > 0) {
index = params.indexOf("&");
if (index == -1) {
paramsValue = params;
params = "";
} else {
paramsValue = params.substring(0, index) ;
params = params.substring(index + 1) ;
}
_processingPostWebServerReqestData(paramsValue);
}
index = reqestAddres.indexOf("Referer:");
paramsValue = reqestAddres.substring(index +
index = paramsValue.indexOf("\r");
paramsValue = paramsValue.substring(0 , index);
params = "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML><html><head> <script type=\"text/javascript\">document.location.replace(\"";
params = params + paramsValue;
params = params + "\");</script></head><body></body></html>\r\n";
ESP8266ControllerWifi_tspWebServer_client.print(params);
delay(1);
ESP8266ControllerWifi_tspWebServer_client.flush();
ESP8266ControllerWifi_tspWebServer_client.stop();
}
void _processingPostWebServerReqestData(String paramData)
{
byte index=paramData.indexOf("=");
if(index<0){return;}
String key = paramData.substring(0,index);
String value = convertPostData(paramData.substring(index+1));
if (key.equals(String("resetController"))) {ESP8266ControllerWifi_isNeededRestsrt = 1; return;}
if (key.equals(String("parSetPage5131609E"))) { if (checkIPAdressString(value)) {
if ((_unsignetLongFromIPAdress(_ipAddressFromString(value))) != (_unsignetLongFromIPAdress(ESP8266ControllerWifiClient_ip))) {
ESP8266ControllerWifiClient_IsNeedReconect =1;
ESP8266ControllerWifiClient_ip.fromString(value);
updateUnsignedLongToEEPROM(4, 0, 0x0, (_unsignetLongFromIPAdress(ESP8266ControllerWifiClient_ip)));
}}
}
if (key.equals(String("parSetPage186902281E"))) {if ( ! (value.equals(String(ESP8266ControllerWifiClient_SSID)))) {
ESP8266ControllerWifiClient_IsNeedReconect =1;
value.toCharArray(ESP8266ControllerWifiClient_SSID, 40);
updateStringToEEPROM(8, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage260890144E"))) {if ( ! (value.equals(String(ESP8266ControllerWifiClient_password)))) {
ESP8266ControllerWifiClient_IsNeedReconect =1;
value.toCharArray(ESP8266ControllerWifiClient_password, 40);
updateStringToEEPROM(48, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage103625498E"))) {if(ESP8266ControllerWifiClient_isDHCP != (value.equals(String("on")))) {;ESP8266ControllerWifiClient_isDHCP = value.equals(String("on"));
ESP8266ControllerWifiClient_IsNeedReconect =1;
updateBooleanToEEPROM(1, 0, 0x0, ESP8266ControllerWifiClient_isDHCP);
}
}
if (key.equals(String("parSetPage115327664E"))) {if ( ! (value.equals(_OtaUpdater_Name))) {
_OtaUpdater_Name = value;
updateStringToEEPROM(88, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage241386574E"))) {if ( ! (value.equals(_OtaUpdater_Password))) {
_OtaUpdater_Password = value;
updateStringToEEPROM(128, 40, 0x0, value);
}
}
if (key.equals(String("parSetPage233353492E"))) {ESP8266_freeParam_4202586 = value.toInt();
updateIntegerToEEPROM(2,0 , 0x0, ESP8266_freeParam_4202586);}
}
String convertPostData(String value)
{
String result = "";
char symbol;
byte code;
int i = 0;
String codeString;
while (i < value.length()) {
symbol = value.charAt(i);
if (symbol == '+') {
result.concat(' ');
} else {
if (symbol == '%')
{
codeString="";
i++;
codeString.concat(value);
i++;
codeString.concat(value);
code = hexStrToInt(codeString);
Serial.println(codeString);
Serial.println(code,HEX);
result.concat(char(code));
} else {
result.concat(symbol);
}
}
i++;
}
return result;
}
void _sendWebServerPage1(void)
{
printToClient(webSettingPageHeader1, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<head>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<head><style>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient((webSettingPageMainStyle+" "), &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("\"</style>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</head>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<body>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<div class=\"header\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(webSettingPageHeaderString, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</div>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<div class=\"content\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<form action=\"\" method=\"POST\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "время переключения громкости (мсек) (Integer)", String(ESP8266_freeParam_4202586, DEC), "parSetPage233353492E", "20", 0, 0)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "Обновление прошивки по WiFi (OTA) - Имя устройства", _OtaUpdater_Name, "parSetPage115327664E", "20", 0, 0)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "Обновление прошивки по WiFi (OTA) - Пароль", _OtaUpdater_Password, "parSetPage241386574E", "20", 0, 0)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "WiFi клиент - Имя сети (SSID)", ESP8266ControllerWifiClient_SSID, "parSetPage186902281E", "20", 0, 1)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "WiFi клиент - Пароль", ESP8266ControllerWifiClient_password, "parSetPage260890144E", "20", 0, 1)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageInputFieldVisualElement ("", "WiFi клиент - IP адрес", (ESP8266ControllerWifiClient_ip.toString()), "parSetPage5131609E", "20", 1, 1)) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient( (_eSP8266SettingWebPageCheckBoxVisualElement("", "WiFi клиент - Получение IP по DHCP", ESP8266ControllerWifiClient_isDHCP, "parSetPage103625498E")) , &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(_ESP8266WebInterfacePageButton_save, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(_ESP8266WebInterfacePageButton_reset, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</div>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("<div class=\"footer\">", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient(webSettingPageFooterString, &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</div>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
printToClient("</body></html>", &ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
commitClient(&ESP8266ControllerWifi_tspWebServer_client, &ESP8266ControllerWifi_tspWebServer_client_buffer);
}
void printToClient(String value, WiFiClient* sendClient, String* sendBuffer)
{
for (int i = 0; i < value.length(); i++)
{
if (sendBuffer->length() > 800)
{
sendClient->print(*sendBuffer);
*sendBuffer = "";
}
sendBuffer->concat(value.charAt(i));
}
}
void commitClient(WiFiClient* sendClient, String* sendBuffer)
{
if ((sendBuffer->length()) > 0) {
sendClient->print(*sendBuffer);
}
*sendBuffer = "";
sendClient->flush();
sendClient->stop();
}
byte readByteFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
return EEPROM.read(addres);
}
void updateByteToEEPROM(int addres, byte bitAddres, byte chipAddres, byte value)
{
isNeededCommitESP8266EEprom = 1;
return EEPROM.write(addres, value);
}
bool readBooleanFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte temp = readByteFromEEPROM( addres, bitAddres, chipAddres);
return bitRead(temp, bitAddres);
}
void updateBooleanToEEPROM(int addres, byte bitAddres, byte chipAddres, bool value)
{
byte temp = readByteFromEEPROM( addres, bitAddres, chipAddres);
bitWrite(temp, bitAddres, value);
updateByteToEEPROM( addres, bitAddres, chipAddres, temp);
}
int readIntegerFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte hight = readByteFromEEPROM( addres, bitAddres, chipAddres);
byte low = readByteFromEEPROM( (addres+1), bitAddres, chipAddres);
return word(hight, low);
}
void updateIntegerToEEPROM(int addres, byte bitAddres, byte chipAddres, int value)
{
updateByteToEEPROM( addres, bitAddres, chipAddres, highByte(value));
updateByteToEEPROM( (addres+1), bitAddres, chipAddres, lowByte(value));
}
unsigned long readUnsignedLongFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
byte x[4];
for(byte i = 0; i < 4; i++) { x = readByteFromEEPROM( (addres+i), bitAddres, chipAddres);}
unsigned long *y = (unsigned long *)&x;
return y[0];
}
void updateUnsignedLongToEEPROM(int addres, byte bitAddres, byte chipAddres, unsigned long value)
{
byte *x = (byte *)&value;
for(byte i = 0; i < 4; i++) {updateByteToEEPROM( (addres+i), bitAddres, chipAddres, x);}
}
char readCharFromEEPROM(int addres, byte bitAddres, byte chipAddres)
{
return readByteFromEEPROM( addres, bitAddres, chipAddres);
}
void updateCharToEEPROM(int addres, byte bitAddres, byte chipAddres, char value)
{
updateByteToEEPROM( addres, bitAddres, chipAddres, value);
}
String readStingFromEEPROM(int addres, int dataLength, byte chipAddres)
{
String result = "";
char tempChar;
for (int i = 0; i < dataLength; i++) {
tempChar = readCharFromEEPROM((addres + i), 0, chipAddres);
if (byte(tempChar) == 0) {
return result;
}
result.concat(tempChar);
}
return result;
}
void updateStringToEEPROM(int addres, int dataLength, byte chipAddres, String value)
{
char tempChar;
for (int i = 0; i < dataLength; i++) {
if (i < value.length()) {
tempChar = value.charAt(i);
} else {
tempChar = char(0);
}
updateCharToEEPROM((addres + i), 0, chipAddres, tempChar);
}
}
String _eSP8266SettingWebPageAllVisualElementsHeader (String style, String label)
{
String result = "<div";
if (style.length() > 0) {
result.concat(" class=\"");
result.concat(style);
result.concat("\"");
}
result.concat("> <p>");
result.concat(label);
result.concat("<br>");
return result;
}
String _eSP8266SettingWebPageATextVisualElement (String style, String label, String value, bool isIP, bool isClient)
{
String result = _eSP8266SettingWebPageAllVisualElementsHeader (style, label);
if ( isClient && isIP && ESP8266ControllerWifiClient_isDHCP && (! ESP8266ControllerWifiClient_status)) {result.concat("??.??.??.??");} else {result.concat(value);}
result.concat("</p></div>");
return result;
}
String _eSP8266SettingWebPageInputFieldVisualElement (String style, String label, String value, String name, String maxlength, bool isIP, bool isClient)
{
if ( isClient && isIP && ESP8266ControllerWifiClient_isDHCP) { return _eSP8266SettingWebPageATextVisualElement (style, label, value, isIP, isClient);}
String result = _eSP8266SettingWebPageAllVisualElementsHeader (style, label);
result.concat("<input type=\"text\" name=\"");
result.concat(name);
result.concat( "\" value=\"");
result.concat(value);
result.concat("\" maxlength=\"");
result.concat( maxlength);
result.concat("\" ></p></div>");
return result;
}
String _eSP8266SettingWebPageCheckBoxVisualElement (String style, String label, bool value, String name)
{
String result = "<div";
if (style.length() > 0) {
result.concat("class=\"");
result.concat(style);
result.concat("\"");
}
result.concat("> <label><input type=\"checkbox\" id=\"");
result.concat(name);
result.concat("1\"");
if(value) { result.concat(" checked ");}
result.concat("/>");
result.concat(label);
result.concat("</label><input type=\"hidden\" name=\"");
result.concat(name);
result.concat("\" id=\"");
result.concat(name);
result.concat("2");
result.concat("\" value=\"");
if(value) {result.concat( "on");} else { result.concat( "off");}
result.concat( "\"><script> var el");
result.concat(name);
result.concat( " = document.querySelector('#");
result.concat(name);
result.concat("1");
result.concat("'); el");
result.concat(name);
result.concat( ".onclick = function() {if (el");
result.concat(name);
result.concat( ".checked) { document.getElementById('");
result.concat(name);
result.concat("2");
result.concat("').value ='on'; } else { document.getElementById('");
result.concat(name);
result.concat("2");
result.concat("').value ='off';}} </script> </div>");
return result;
}
int hexStrToInt(String instring)
{
byte len = instring.length();
if (len == 0) return 0;
int result = 0;
for (byte i = 0; i < 8; i++) // только первые 8 цыфар влезуть в uint32
{
char ch = instring;
if (ch == 0) break;
result <<= 4;
if (isdigit(ch))
result = result | (ch - '0');
else result = result | (ch - 'A' + 10);
}
return result;
}
void _esp8266WifiModuleClientReconnect()
{
if( _checkMacAddres(ESP8266ControllerWifiClient_mac)) { wifi_set_macaddr(0, const_cast<uint8*>(ESP8266ControllerWifiClient_mac));}
if( ESP8266ControllerWifiClient_isDHCP) { WiFi.config(0U, 0U, 0U, 0U, 0U); } else {
WiFi.config(ESP8266ControllerWifiClient_ip, ESP8266ControllerWifiClient_gateway, ESP8266ControllerWifiClient_subnet, ESP8266ControllerWifiClient_dns , ESP8266ControllerWifiClient_dns );
}
WiFi.begin(ESP8266ControllerWifiClient_SSID, ESP8266ControllerWifiClient_password);
}
IPAddress _ipAddressFromUnsignetLong(unsigned long value)
{
IPAddress result;
byte *x = (byte *)&value;
for (byte i = 0; i < 4; i++) {
result = x;
}
return result;
}
bool checkIPAdressString(String value)
{
IPAddress temp;
return temp.fromString(value);
}
IPAddress _ipAddressFromString(String value)
{
IPAddress temp;
temp.fromString(value);
return temp;
}
unsigned long _unsignetLongFromIPAdress(IPAddress value)
{
byte buufer[4] = {0, 0, 0, 0};
for (byte i = 0; i < 4; i++) {
buufer[i] = value[i];
}
unsigned long *y = (unsigned long *)&buufer;
return y[0];
}
bool _checkMacAddres(byte array[])
{
bool result = 0;
for (byte i = 0; i < 6; i++)
{
if (array[i] == 255) {
return 0;
}
if (array[i] > 0 ) {
result = 1;
}
}
return result;
}
WiseLord,
А Вас Благодарю за терпение и труд!
- Сообщения: 191
- Зарегистрирован: Вс мар 04, 2018 19:38:32
заинтересовался проектом
вопрос: в дальнейшем планируется поддержка дисплеев ST7735S и ILI9341spi? сейчас они можно сказать недорогие и ходовые, 9341 если с платой адаптации можно задействовать гнездо флешки для расширения проигрывателем SD
вопрос: в дальнейшем планируется поддержка дисплеев ST7735S и ILI9341spi? сейчас они можно сказать недорогие и ходовые, 9341 если с платой адаптации можно задействовать гнездо флешки для расширения проигрывателем SD
[uquote="НУ понимаеш...",url="/forum/viewtopic.php?p=3757481#p3757481"]в дальнейшем планируется поддержка дисплеев ST7735S и ILI9341spi?[/uquote]
Здесь посмотрите: https://radiokot.ru/artfiles/6484/
Здесь посмотрите: https://radiokot.ru/artfiles/6484/
Евгений-34
огромное спасибо!
то что нужно
огромное спасибо!
Владимир, после недельного использования последней прошивки, заметил некорректную работу спектроанализатора. При нормальной (столбики почти во весь рост) работе в режиме спектроанализатора, пиковый индикатор зашкаливает, практически не двигается. Если уменьшить чувствительность, ориентируясь на пиковый индикатор, анализатор спектра работает на половину экрана.
Это мелочи.
Достал старый усилитель на ATmega32, прошил последним кодом - да, на реальной музыке не очень выглядело. Поправил в последних исходниках.
- Сообщения: 515
- Зарегистрирован: Пт апр 22, 2011 00:14:21
жаль у меня только беспонтовый, без подсветки wg12864( bg16080 без переписки кода не пойдет(
Смотри: вот это - ноль, а это - фаааааааа!!!!!!!!!!!!!!!
- Сообщения: 3
- Зарегистрирован: Вт июн 24, 2014 09:28:03
Доброго времени суток. Читаю форум и у меня есть вопрос. Можно ли этот проект реализовать на Ардуино , если подобный вопрос обсуждался то подскажите где на форуме. Я новичек сильно не пинайте.


