Вывод данных ESP8266
- Войдите на сайт для отправки комментариев
Добрый день, уважаемые форумчане ! Опыта имею немного и обратился сюда за советом более опытных людей.
Суть вопроса проста - есть ESP8266, которая общается с Aruino Uno по Serial порту. Система на подобие охранной с оповещением по смс и по интернету. На ESP8266 поднят Web сервер. Arduino Uno выступает в качестве базы для датчиков (подключенными к ней через радио канал) и некой SD карты (eeprom Uno). Eeprom хранит номера телефонов пользователей и список датчиков, которые необходимо выводить на WEB сервере. Вопрос - как лучше выводить информацию без "затупов" со стороны Serial. Что я имею ввиду - Когда я перехожу на страницу /phoneSettings - ESP отправляет запрос на Uno, для того, чтобы она залезла в EEPROM и прочитала заветные номера телефонов и отправила их назад для отображения в WEB интерфейсе, но на это уходит достаточно много времени и сидеть - ждать, пока ESP получит ответ от Uno и подгрузит сайт с данными - долго и иногда вообще не получается, не говоря уже о том, что в будущем мне надо будет выводить список датчиков, которых может быть достаточно много и формирование ответа на запрос может занять большое кол-во времени. Код прикладываю ниже. P.s не пугайтесь длинны кода базы - там еще есть общение по радио каналу и с модулем sim800l. Заранее извиняюсь за такой огрызок, но вдруг некоторые люди будут грешить на методы написания и взятия с EEPROM.
Скетч базы
// ЭТО СКЕТЧ ПРИЁМНИКА (БАЗА)!!! //--------------------- НАСТРОЙКИ ---------------------- #define CH_NUM 0x60 // номер канала, должен совпадать с передатчиком (датчик) // УРОВЕНЬ МОЩНОСТИ ПЕРЕДАТЧИКА #define SIG_POWER RF24_PA_MAX // СКОРОСТЬ ОБМЕНА ДАННЫМИ // должна быть одинакова на приёмнике и передатчике! #define SIG_SPEED RF24_1MBPS //--------------------- НАСТРОЙКИ ---------------------- //--------------------- БИБЛИОТЕКИ --------------------- #include "nRF24L01.h" // библиотеки для радио модуля #include "RF24.h" RF24 radio(9, 10); // создать радио модуль на пинах 9 и 10 #include "SoftwareSerial.h" //библиотека для создания сериал порта на любом пине SoftwareSerial SIM800(4,5); //создать сериал порт для прослушки на пинах 2,3 SoftwareSerial WIFI(2,3); //TX желтый RX зеленый //--------------------- БИБЛИОТЕКИ --------------------- //--------------------- ПЕРЕМЕННЫЕ ---------------------- byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб byte callbackData[3]; // массив принятых данных (id от кого, type тип датчика, data что передал) byte Data[4]; //массив отправляемых данных (id кому , type кому , id новый , type новый) byte pipeNo; //Байтовая переменная хранения номера трубы для отправки struct Sensor { //Переменная типа struct для хранения данных о датчике byte id; byte type; byte data; }; Sensor cashDataToSend; // кешевая переменная для отправки данных String _response = ""; // Переменная для хранения ответа модуля sim800L String data; String additionalInfo; String command; //--------------------- ПЕРЕМЕННЫЕ ---------------------- void setup() { WIFI.begin(9600); Serial.begin(9600); //открываем порт для связи с ПК radioSetup(); //ф-я настройки радио модуля simSetup(); //ф-я настройки модуля sim800L WIFI.listen(); // sendSMS("+79520534351","Hi"); // writePhoneNumber(1,"+79520534351"); // for(int i =0; i<50; i++){ //// writeNewSensorSettings(0,1,mySensor); //// clearSensorById(i); //// delay(200); // Serial.print("Info "); Serial.println(eeprom_read_byte(i)); // delay(5); // } // // deletePhoneNumber(1); // delay(100); // Serial.println(getPhoneNumber(1)); // writePhoneNumber(1,"+79520534351"); } void loop() { if(radio.available()){ Serial.println("Что-то пришло ,читаю"); radio.read(&callbackData, sizeof(callbackData)); if(callbackData[0]==0 && callbackData[1]!= 0){ registerNewSensor(); }else if (callbackData[2]!=0){ Serial.println("Аларм"); makeCall("+79520534351"); } } if(WIFI.available()){ Serial.println("Есть инфа с wifi"); data = WIFI.readString(); Serial.println(data); if(data.substring(data.indexOf(' ')+1)!=""){ additionalInfo = data.substring(data.indexOf(' ')+1,data.length()); } data.remove(data.indexOf(' ')); command = data; if(command == "addMainPhoneNumber"){ Serial.println("Команда на добавление главного номера телефона"); writePhoneNumber(1,additionalInfo); } if(command == "deleteMainPhoneNumber"){ Serial.println("Команда на удаление главного номера телефона"); deletePhoneNumber(1); } if(command == "deleteAdditionalPhoneNumber"){ Serial.println("Команда на удаление второго номера телефона"); deletePhoneNumber(2); } if(command == "getTelephone"){ String s; s= s + getPhoneNumber(1); s = s + " "; s = s + getPhoneNumber(2); WIFI.print(s); } } } void radioSetup() { // настройка радио модуля radio.begin(); // активировать модуль radio.setAutoAck(1); // режим подтверждения приёма, 1 вкл 0 выкл radio.setRetries(0, 15); // (время между попыткой достучаться, число попыток) radio.setPayloadSize(32); // размер пакета, байт radio.openReadingPipe(1, address[0]); // хотим слушать трубу 0 radio.openWritingPipe(address[1]); // хотим писать на трубу по первому адресу radio.setChannel(CH_NUM); // выбираем канал radio.setPALevel(SIG_POWER); // задаем уровень мощности передатчика radio.setDataRate(SIG_SPEED); // задаем скорость обмена // должна быть одинакова на приёмнике и передатчике! // при самой низкой скорости имеем самую высокую чувствительность и дальность!! (логично) radio.powerUp(); // начать работу radio.startListening(); // начинаем слушать эфир, мы приёмный модуль } void simSetup(){ SIM800.begin(9600); //Скорость порта для связи Arduino с GSM модемом delay(100); sendATCommand("AT", true); //Настраиваем Sim модуль для общения (скорость) sendATCommand("AT+CMGF=1", true); //Включаем функцию отправки сообщений } void makeCall(String phone) //ф-я звонка { SIM800.listen(); sendATCommand("ATD"+phone+";", false); WIFI.listen(); } void sendSMS(String phone, String message) //ф-я отправки sms { SIM800.listen(); sendATCommand("AT+CMGS=\"" + phone + "\"", true); // Переходим в режим ввода текстового сообщения sendATCommand(message + "\r\n" + (String)((char)26), true); // После текста отправляем перенос строки и Ctrl+Z WIFI.listen(); } void registerNewSensor(){ Serial.println("Новенький"); radio.stopListening(); Serial.println("Перестал читать"); writeNewSensorSettings(callbackData[1],callbackData[2],cashDataToSend); Data[0]= callbackData[0]; Data[1]= callbackData[1]; Data[2]= cashDataToSend.id; Data[3]= cashDataToSend.type; Serial.print("Новый id"); Serial.println(Data[2]); Serial.print("Новый type"); Serial.println( Data[3]); if (waitRadioResponse()){ Serial.println("Отправил, удачная регистрация"); radio.startListening(); Serial.println("Начинаю слушать"); }else{ clearSensorById(Data[2]); Serial.println("Нет ответа, освободил id"); radio.startListening(); Serial.println("Начинаю слушать"); } } bool waitRadioResponse(){ bool _resp=false; long _timeout = millis() + 2000; // Переменная для отслеживания таймаута (10 секунд) while (!_resp && millis() < _timeout) { _resp = radio.write(Data, sizeof(Data)); }; // Ждем ответа или выжидаем таймаут в 2 секунды if (_resp) { // Если есть, что считывать... return true; // ... считываем и запоминаем } else { // Если пришел таймаут, то... return false; // ... оповещаем об этом и... } } bool isItFreeCell(int num) { //ф-я проверки клетки eeprom на пустоту Serial.print("isItFreeCell() <-"); Serial.println(num) ; byte cash = eeprom_read_byte((uint8_t*)num); Serial.print("Что находится в ячейке num"); Serial.println(cash) ; delay(15); Serial.print(cash); Serial.print(" = "); Serial.print(cash); Serial.println(" ?") ; if (cash == 255) { Serial.println(" Да") ; return true; } else { Serial.println(" Нет") ; return false; } } void clearSensorById(int id) { //ф-я очистки клеток памяти eeprom от сенсора по его id for (int i = 10; i < 1000; i= i + 3) { if (eeprom_read_byte((uint8_t*)i) == id) { delay(10); eeprom_write_byte((byte*)i, 255); delay(10); eeprom_write_byte((byte*)i + 1, 255); delay(10); eeprom_write_byte((byte*)i + 2, 255); delay(10); break; } } } void writeNewSensorSettings(byte type, byte data, Sensor& CallbackData) { //ф-я записи нового датчика в память eeprom (дывается id) Sensor mySensor; mySensor.type = type; mySensor.data = data; for (int i = 10; i < 1000; i = i + 3) { Serial.print("i= "); Serial.println(i) ; if (isItFreeCell(i) == true) { delay(500); if (i==10){ mySensor.id=1; }else { mySensor.id = eeprom_read_byte((uint8_t*)i-3)+1; //Чтение из eeprom } Serial.print("Старый id = "); Serial.println(mySensor.id); Serial.print("Новый id = "); Serial.println(eeprom_read_byte((uint8_t*)i-3)) ; eeprom_write_block((void*)&mySensor, (int*)i, sizeof(mySensor)); eeprom_read_block((void*)&CallbackData, (int*)i, sizeof(CallbackData)); break; } } } void readSensorSettingsById(int id,Sensor& callbackData){ //ф-я вывода данных о сенсое по id for (int i =10;i<1000;i= i+3){ if (eeprom_read_byte((uint8_t*)i) == id) { eeprom_read_block((void*)&callbackData, (int*)i, sizeof(callbackData)); } } } void writePhoneNumber(int phoneType, String Phone){ //ф-я записи номеров телефона long поскольку int(16 бит) -32768 до 32767 и по этим причинам не подходит для номера телефона. phoneType - Главный номер =1, дополнительный номер телефона =2; phomeNumber должен быть вида +79......... Phone = Phone.substring(3); long phomeNumber = Phone.toInt(); if(phoneType == 1){ int n=0; for(int i=5;i>0;i--){ delay(50); eeprom_write_byte(n, phomeNumber%100); delay(50); n++; phomeNumber/=100; } }else{ int n=0; for(int i=5;i>0;i--){ delay(50); eeprom_write_byte(n+5, phomeNumber%100); delay(50); n++; phomeNumber/=100; } } } void deletePhoneNumber(int phoneType){ //ф-я удаления номеров телефона phoneType - Главный номер =1, дополнительный номер телефона =2; if(phoneType == 1){ for(int i=0;i<5;i++){ delay(10); eeprom_write_byte(i, 0); delay(10); } }else { for(int i=5;i<10;i++){ delay(10); eeprom_write_byte(i, 0); delay(10); } } } String getPhoneNumber(int phoneType){ //ф-я получения основонго номеров телефона phoneType - Главный номер =1, дополнительный номер телефона =2; long readPhoneNumber=0; String phoneNumber; long mnozhitel=1; if(phoneType == 1){ for(int i=0;i<5;i++){ readPhoneNumber = mnozhitel * eeprom_read_byte(i) + readPhoneNumber ; mnozhitel *= 100; } }else{ for(int i=5;i<10;i++){ readPhoneNumber = mnozhitel * eeprom_read_byte(i) + readPhoneNumber ; mnozhitel *= 100; } } if(readPhoneNumber < 1){ phoneNumber = ""; } else if(readPhoneNumber < 9999999){ phoneNumber = "+7900"; }else if (readPhoneNumber < 99999999){ phoneNumber = "+790"; }else{ phoneNumber = "+79"; } phoneNumber += readPhoneNumber; return phoneNumber; } String waitResponse() { // Функция ожидания ответа и возврата полученного результата String _resp = ""; // Переменная для хранения результата long _timeout = millis() + 10000; // Переменная для отслеживания таймаута (10 секунд) while (!SIM800.available() && millis() < _timeout) {}; // Ждем ответа или выжидаем таймаут в 10 секунд if (SIM800.available()) { // Если есть, что считывать... _resp = SIM800.readString(); // ... считываем и запоминаем } else { // Если пришел таймаут, то... Serial.println("Timeout..."); // ... оповещаем об этом и... } return _resp; // ... возвращаем результат. Пусто, если проблема } String sendATCommand(String cmd, bool waiting) { String _resp = ""; // Переменная для хранения результата Serial.println(cmd); // Дублируем команду в монитор порта SIM800.println(cmd); // Отправляем команду модулю if (waiting) { // Если необходимо дождаться ответа... _resp = waitResponse(); // ... ждем, когда будет передан ответ if (_resp.startsWith(cmd)) { // Убираем из ответа дублирующуюся команду _resp = _resp.substring(_resp.indexOf("\r", cmd.length()) + 2); } Serial.println(_resp); // Дублируем ответ в монитор порта } return _resp; // Возвращаем результат. Пусто, если проблема }
Скетч EPS8266
#import "index.h" #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> /* Put your SSID & Password */ const char* ssid = "MyArduino"; // Enter SSID here ESP8266WebServer server(80); void setup() { Serial.begin(9600); delay(100); Serial.println("Connecting to "); WiFi.softAP(ssid); // Serial.print("Got IP: "); Serial.println(WiFi.localIP()); server.begin(); Serial.println("HTTP server started"); server.on("/", handleRoot); server.on("/phoneSettings", handlePhone); server.on("/deleteMainPhone", deleteMainPhone); server.on("/deleteAdditionalPhone", deleteAdditionalPhone); // server.on("/mainPhoneNumber", !!!!); // server.on("/additionalPhoneNumber", !!!!!!); } void loop() { server.handleClient(); } void handleRoot() { String s = MAIN_page; server.send(200, "text/html", s); } void handlePhone(){ String s = PHONE_page; String data; Serial.print("getTelephone"); long _timeout = millis() + 4000; while(Serial.available() && millis() < _timeout){ data = Serial.readString(); } if (data != 0){ String additionalPhone = data.substring(data.indexOf(' ')+1,data.length()); data.remove(data.indexOf(' ')); String mainPhone = data; s.replace("@@P1@@", mainPhone); s.replace("@@P2@@", additionalPhone); server.send(200, "text/html", s); } else { server.send(200, "text/plain", "Oops, an error, please, refresh the page"); } } void deleteMainPhone(){ Serial.print("deleteMainPhoneNumber"); long _timeout = millis() + 4000; while(millis() < _timeout){} handlePhone(); } void deleteAdditionalPhone(){ Serial.print("deleteAdditionalPhoneNumber"); long _timeout = millis() + 4000; while(millis() < _timeout){} handlePhone(); }
Ах, да, кто меня помнит (вдруг) по раньше созданным темам - устройство подсобралось и выглядит уже вот так :D

В ESP тоже есть EEPROM...
Согласен, но памяти там по сравнению с Uno - маловато. Да и костыль в виде - появился новый датчик - пришел на Uno, зарегался, получил id. Uno -отправлю ка я данны о датчике по serial к esp8266, чтобы она запихнула их в сой EEPROM - костыль - костылем. + У меня самая остойная версия ESP - еле-еле душа в теле на скетч места хватает, не говоря уже о запоминании телефонных номеров и кучи дачтиков с полями id type data
Возможно есть еще какой-то способ крое запоминание данных в EEPROM ESP8266 ?
Скомпилируй без использования SPIFF, подключи I2C eeprom... Да и странно, конечно, что в ESP не нашлось завалящего килобайта спейса и она была уной бита.
А если подтереть SPIFF куда можно будет положить сам веб интерфейс? (Html файл)
Возможно вы и правы. Сейчас я выделяю 2 Мегабайта для скетчей и 1 Мбайт для SPIFFS. Возможно все и поместится. Как думаете - лучше переделать систему ? И - как думаете - чтение из EEPROM и передача на веб интерфейс будет намного быстрее чем запрос на уно, чтение из EEPROM и передача обратно через Serial ?
И еще вопрос - я не использую FTP сервер и соответственно не пихаю на ESP лишние файлы (HTML) документ я использую в формате просто кода (есть переменная, в которой написан HTML код) Я беру эту переменную у index.h и использую для отображения (знаю, геморрой и костыль, но - как-то так). Соответсвтенно я думаю (подозреваю) что вообще не использую SPIFFS
Я в RAW-переменную кладу и отдаю как обычный char[]
При этом в SPIFFS не пропадает незанятое место.
В экзампле s1 смотри: https://en.cppreference.com/w/cpp/language/string_literal
Примерно так ?
Я беру вот эту супер здоровую переменную и вставляю просто ее на сайт (А там чисто целый здоровый HTML + CSS + JS код)
38
void
handleRoot() {
39
String s = MAIN_page;
40
server.send(200,
"text/html"
, s);
41
}
И - как думаете - чтение из EEPROM и передача на веб интерфейс будет намного быстрее чем запрос на уно, чтение из EEPROM и передача обратно через Serial ?
С вебом меньше геморроя будет, полагаю по скорости, может и незаметно на таких объёмах. Хотя, если через всякие блокирующие parseInt работаете, то потенциально ускорение может произойти.
Я беру вот эту супер здоровую переменную и вставляю просто ее на сайт (А там чисто целый здоровый HTML + CSS + JS код)
Через String гнать необязательно, вроде. Я просто скармливаю char* вебсерверу. Неохота ноут открывать просто чтобы глянуть. Но Стринги я точно не использую. CSS отдельно отдаю, HTML с жабаскриптом кучкой.
И - как думаете - чтение из EEPROM и передача на веб интерфейс будет намного быстрее чем запрос на уно, чтение из EEPROM и передача обратно через Serial ?
Нет, не работаю через parseInt. Все просто - когда перехожу по ссылке - есп кидает запрос, уно по названию запроса узнает что делать и собирает ответ из eeprom и кидает его обратно.
Я беру вот эту супер здоровую переменную и вставляю просто ее на сайт (А там чисто целый здоровый HTML + CSS + JS код)
Ну, я просто сваливаю в 1 файл и кидаю сразу одну большую переменную
Примерно вот так всё происходит:
Понял, спасибо
И еще 1 вопросик - не хчоу создавать новую тему - как передать массив через Serial port? У меня в EEPROM, как я раньше описывал есть датчики (их id и type) . Выглядит это все примерно так
1 -id
1 - type
2 -id
1 - type
3 - id
4-type
Итд. Вопрос - каак собрать это все в массив и пихнуть через сериал на ESP8266?
Тут вопрос больше в квалификации, а не способе. Я бы в бинарном пакете гнал. Но здесь много собак съесть надо, прежде чем жонглировать байтами начать.
Наверное Вам проще в plain text строке с разделителями гнать: префикс пакета - Id 1- type1 - ... - постфикс пакета. Передающая сторона просто print() делает. На принимающей
по префиксу начинаете разбор данных , по постфиксу заканчивает. Или после префикса количество пар данных передать и потом на него ориентироваться при приёме. Способов много.
Согласен, но памяти там по сравнению с Uno - маловато.
Хммм ... неужели меньше 1к ?
Согласен, но памяти там по сравнению с Uno - маловато.
Хммм ... неужели меньше 1к ?
Я если честно не знаю сколько там. Вроде когда лью -указываю 4МБ, пропускает
Не могли бы накидать код ? Я просто не совсем понял как именно передавать. Правильно ли я понял - Берем первый id и ставим его в конец - и пока читающая сторона не встретит этот "первый пакет" - она не прекращает читать ?
Я если честно не знаю сколько там. Вроде когда лью -указываю 4МБ, пропускает
просто вы пишете, что там "маловато по сравнению с Уно". У Уно 1 килобайт. А на ЕСП 4 МЕГАбайта.
Вероятно я забыл что значит "маловато"...
Если вернутся к теме ветки - Садман вам намекал, что Уно тут вовсе не нужна, со своим ЕЕПРОМ в 1К. Все можно сделать на ЕСП. И не надо будет никакие массивы гонять по Сериал
Не могли бы накидать код ? Я просто не совсем понял как именно передавать. Правильно ли я понял - Берем первый id и ставим его в конец - и пока читающая сторона не встретит этот "первый пакет" - она не прекращает читать ?
Накидывать мне не особо интересно, так как без отладки я не отдаю исходники, а для отладки всю эту хрень коммутировать мне лень.
Суть простая - передающая сторона просто накидывает через print префикс, разделитель, айди, разделитель, тип, разделитель... постфикс.
Принимающая ловит префикс, понимает, что дальше пойдут данные. После разделителя складывает символы в буфер. Поймала разделитель - в буфере получила ID. Сделала с им что-нить, читает дальше до разделителя. Поймала - в буфере тип. И т.д.
Но, если это просто для вывода на страницу, то Uno может гнать прямо фрагмент HTML, не так ли? ESP остаётся его принять и метнуть в браузер.
Я если честно не знаю сколько там. Вроде когда лью -указываю 4МБ, пропускает
просто вы пишете, что там "маловато по сравнению с Уно". У Уно 1 килобайт. А на ЕСП 4 МЕГАбайта.
Вероятно я забыл что значит "маловато"...
Если вернутся к теме ветки - Садман вам намекал, что Уно тут вовсе не нужна, со своим ЕЕПРОМ в 1К. Все можно сделать на ЕСП. И не надо будет никакие массивы гонять по Сериал
Дело в том, что подключение датчиков происходит по радио каналу. Я не слышал чтобы ESP8266 умела в радио
Не могли бы накидать код ? Я просто не совсем понял как именно передавать. Правильно ли я понял - Берем первый id и ставим его в конец - и пока читающая сторона не встретит этот "первый пакет" - она не прекращает читать ?
Неплохо, я даже об этом не думал, спасибо
Дело в том, что подключение датчиков происходит по радио каналу. Я не слышал чтобы ESP8266 умела в радио
Вот с этого момента меня прям сильно ваша беседа увлекла. Про какое такое "радио" вы говорите, которое умеет ардуина а ESP никак?
Дело в том, что подключение датчиков происходит по радио каналу. Я не слышал чтобы ESP8266 умела в радио
Вот с этого момента меня прям сильно ваша беседа увлекла. Про какое такое "радио" вы говорите, которое умеет ардуина а ESP никак?
Nrf24l01 и ESP8266. Я честно не знаю - но вроде ESP не умеет "болтать" с NRF
Просто надо взять ESP с количеством ног побольше, думаю.
Nrf24l01 и ESP8266. Я честно не знаю - но вроде ESP не умеет "болтать" с NRF
Esp разучился spi?
Возможно, я знаю что ESP вроде как в общем (с большим кол-вом ног) умеет в радио, но у меня не такая ( А мне нужно срочно т.к диплом :D
Nrf24l01 и ESP8266. Я честно не знаю - но вроде ESP не умеет "болтать" с NRF
Esp разучился spi?
У меня "кастратик", посмотрите первое фото. Там ножек - только для реализации веб на сколько я понимаю. А именно - 1 ножка)
В мире не только Aliexpress ESP продаёт. В каком городе живёте?
В Москве, но реализовывать "многоногую ESP" - перековыривая готовый проект на 90% - не очень хочется )
Пока нет опыта - несколько раз будете не на 90%, а на все 146% перековыривать. Таков путь.
Надеюсь такого не будет ) До сдачи проекта остался месяц :D
Я не слышал чтобы ESP8266 умела в радио
А Уно умеет радио? Сама? Или через НРФ24?
ЕСП точно так же как уно - подключаешь NRF24 и работаешь
Я с вами полностью согласен, что было бы проще и лучше использовать сразу ESP8266 многоногую. Чтобы сразу с распаяным wifi и не тыкать себе в голову массивами через сериал ) Ну, на будущее буду знать )
Я не слышал чтобы ESP8266 умела в радио
А Уно умеет радио? Сама? Или через НРФ24?
ЕСП точно так же как уно - подключаешь NRF24 и работаешь
Прошу заметить - что я писал выше. У меня - кастратик одноногий, на котором реализовывается только web сервер. То, что вы пишете и ежу понятно ) Возможно я не так выразился
Надеюсь такого не будет ) До сдачи проекта остался месяц :D
будет-будет.
пока в этой ветке вы, простите, сплошную пургу несете... Так что я бы на скорую сдачу диплома не рассчитывал...
Я не слышал чтобы ESP8266 умела в радио
А Уно умеет радио? Сама? Или через НРФ24?
ЕСП точно так же как уно - подключаешь NRF24 и работаешь
Хотя, я смотрел что вроде бы как (не утверждаю) - ESP умеет даже в радио - если распаяны соответствующие ноги.
В Москве, но реализовывать "многоногую ESP" - перековыривая готовый проект на 90% - не очень хочется )
Ооочень странная мотивация. Замените контроллер на полноценный и получИте ту-же самую ножку, плюс еще десяток. 8266 стоит около 220 рублей, есп32 стоит около 300. Не понимаю...
Надеюсь такого не будет ) До сдачи проекта остался месяц :D
будет-будет.
пока в этой ветке вы, простите, сплошную пургу несете... Так что я бы на скорую сдачу диплома не рассчитывал...
Да тут осталось реализовать только проброс датчиков и все . Все остальное уже работает - оповещение по звонкам + автоподключение датчиков итд. Осталось только вопрос с web интерфейсом решить.
Я с вами полностью согласен, что было бы проще и лучше использовать сразу ESP8266 многоногую. Чтобы сразу с распаяным wifi и не тыкать себе в голову массивами через сериал ) Ну, на будущее буду знать )
а зачем проект переделывать при смене маленькой ЕСП на "многоногую"? Разве в коде что-то изменится?
Или вы вообще по нулям в этом... ?
Хотя, я смотрел что вроде бы как (не утверждаю) - ESP умеет даже в радио - если распаяны соответствующие ноги.
сам - не умеет.
В Москве, но реализовывать "многоногую ESP" - перековыривая готовый проект на 90% - не очень хочется )
Ооочень странная мотивация. Замените контроллер на полноценный и получИте ту-же самую ножку, плюс еще десяток. 8266 стоит около 220 рублей, есп32 стоит около 300. Не понимаю...
Тут дело в сроках. Я понимаю, что так лучше ) Но я уже все распаял и сделал ) вот - решил спросить совета, мне его дали ) А так - да, согласен с вами что эффективнее было бы использовать esp32, но сроки горят )
Я с вами полностью согласен, что было бы проще и лучше использовать сразу ESP8266 многоногую. Чтобы сразу с распаяным wifi и не тыкать себе в голову массивами через сериал ) Ну, на будущее буду знать )
а зачем проект переделывать при смене маленькой ЕСП на "многоногую"? Разве в коде что-то изменится?
Или вы вообще по нулям в этом... ?
изменится то, что надо будет паяться , плату делать самому (тут то я использовал макетку которая к uno подходит) + еще пробрасывать код. + еще если честно я раньше с esp32 не работал и честно - не знаю какие проблемы могут возникнуть, так что - нет желания и времени. Проще уже допилить тут и сдать )
Тут дело в сроках. Я понимаю, что так лучше ) Но я уже все распаял и сделал ) вот - решил спросить совета, мне его дали ) А так - да, согласен с вами что эффективнее было бы использовать esp32, но сроки горят )
пока поймете, что мы правы - времени останется еще меньше.
Я с вами полностью согласен, что было бы проще и лучше использовать сразу ESP8266 многоногую. Чтобы сразу с распаяным wifi и не тыкать себе в голову массивами через сериал ) Ну, на будущее буду знать )
а зачем проект переделывать при смене маленькой ЕСП на "многоногую"? Разве в коде что-то изменится?
Или вы вообще по нулям в этом... ?
Главное - опыт получен, выводы сделаны ) В следующий раз буду оценивать риски и прикидывать функционал сразу, я в реализации еще плох как вы понимаете, о esp32 даже ни слуху ни духу.
еще если честно я раньше с esp32 не работал и честно - не знаю какие проблемы могут возникнуть
не надо вам есп32, он и правда другой. возьмите ту же самую ЕСП8266, что сейчас у вас - только на плате с многими выводами.
Код вообще переделывать не придется.
А перепаять - ну это смешно, дело одного вечера. С кодом передачи массива по сериал вы встрянете на неделю, думаю