Вывод данных 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 код)
38voidhandleRoot() {39String s = MAIN_page;40server.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 файл и кидаю сразу одну большую переменную
Примерно вот так всё происходит:
const char textWebPageReboot[] = R"~~~~( <!DOCTYPE html> <html> <head> <title>AccessPad BLE reboot</title> <meta http-equiv="refresh" content="500000;URL=/"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon"> </head> <body> <h1>Systew was rebooted in 5 sec</h1> </body> </html> )~~~~"; ... static void handleWebConfigReboot() { WebConfigurator.send(200, "text/html", textWebPageReboot); delay(500); // Shutdown AP, turn off WiFi module WiFi.softAPdisconnect(true); ESP.restart(); } .... WebConfigurator.on("/reboot", handleWebConfigReboot); ....const char textWebPageReboot[] = R"~~~~( <!DOCTYPE html> <html> <head> <title>AccessPad BLE reboot</title> <meta http-equiv="refresh" content="500000;URL=/"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon"> </head> <body> <h1>Systew was rebooted in 5 sec</h1> </body> </html> )~~~~"; ... static void handleWebConfigReboot() { WebConfigurator.send(200, "text/html", textWebPageReboot); delay(500); // Shutdown AP, turn off WiFi module WiFi.softAPdisconnect(true); ESP.restart(); } .... WebConfigurator.on("/reboot", handleWebConfigReboot); ....Понял, спасибо
const char textWebPageReboot[] = R"~~~~( <!DOCTYPE html> <html> <head> <title>AccessPad BLE reboot</title> <meta http-equiv="refresh" content="500000;URL=/"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon"> </head> <body> <h1>Systew was rebooted in 5 sec</h1> </body> </html> )~~~~"; ... static void handleWebConfigReboot() { WebConfigurator.send(200, "text/html", textWebPageReboot); delay(500); // Shutdown AP, turn off WiFi module WiFi.softAPdisconnect(true); ESP.restart(); } .... WebConfigurator.on("/reboot", handleWebConfigReboot); ....И еще 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, что сейчас у вас - только на плате с многими выводами.
Код вообще переделывать не придется.
А перепаять - ну это смешно, дело одного вечера. С кодом передачи массива по сериал вы встрянете на неделю, думаю