Arduino Mega Server для esp8266

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Вт авг 02, 2016 8:53 am

Да про честную 3D графику конечно промашка вышла, что бы обрабатывать вышеупомянутую графику нужно обладать ни хилым быстродействием а также располагать математическим сопроцессором
Я никогда и нигде не говорил, что 3D графику обрабатывает микроконтроллер. Я говорил, что теперь есть возможность, например, на ESP8266 хранить и использовать (при помощи яваскрипта и браузерной части пользователя) честные интерактивные 3D сцены. И АМС имеет этот механизм демонстрирует его на конкретных примерах, находящихся в дистрибутиве.

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

Что тут непонятного и зачем притягивать за уши сопроцессоры и обработку 3D силами самого контроллера (что очевидный бред, по крайней мере на данном этапе развития технологий)?
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server для esp8266

Сообщение alexsis_76 » Вт авг 02, 2016 9:33 am

честные интерактивные 3D сцены
а на меге были не честные?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Вт авг 02, 2016 9:44 am

а на меге были не честные?
В смысле? (прям беда с этим 3D, одно сплошное непонимание)

Я не знаю, что вы имеете в виду, но 3D совершенно одинаковое на Genuino 101, Arduino Mega, Due и ESP8266. Основано на 3D библиотеках Processing.js и Three.js, причём 3D индикатор не абстрактный, а индицирует реальную сетевую активность интерфейса АМС в реальном времени.

Надеюсь, так будет понятно.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server для esp8266

Сообщение serghei » Вт авг 02, 2016 9:51 am

Ребята, давайте завяжем выяснять крутизну покемонов против телепузиков в этой теме. Мне нравится позиция Алекса в части обучения программированию. Медленно ,но верно ползу к заветной цели.После третьего пинка в нужном направлении получилась такая картинка. Теперь дело за кодом.
Вложения
Proba pera.png
Сенсоров пока нет
Proba pera.png (81.46 КБ) 8296 просмотров
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Вт авг 02, 2016 9:57 am

Ребята, давайте завяжем выяснять крутизну покемонов против телепузиков в этой теме.
На мой взгляд, serghei являет собой редкий пример адекватного и вменяемого пользователя. Ничего не требует и работает головой и руками. :) Молодец
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server для esp8266

Сообщение serghei » Вт авг 02, 2016 10:08 am

Да я уже достал всех знакомых профессиональных программистов. Нет, но через заднее слуховое отверстие я получаю данные с двух сенсоров и браузер их показывает ,но не может определить от кого что свалилось.Думаем дальше....
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server для esp8266

Сообщение alexsis_76 » Вт авг 02, 2016 11:22 am

serghei,а если сделать так,есть там функция carousel она раздает различные запросы (8 шт)в зависимости от значения currPony мне честно говоря не совсем понятно ее назначение, было бы логичнее сделать так
когда нам нужно получить значение сенсора мы спрашиваем его и получаем все данные в одной посылке
я думаю надо сделать так
сдесь мы не делаем radio.openReadingPipe ;открываем только на прием
void nrf24Init() {
initStart("nRF24", true);
timeStamp();
Serial.println(F(" Base Rec eiving"));
radio.begin();
radio.setPALevel(RF24_PA_LOW); // default RF24_PA_MAX

radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1, addresses[1]);

radio.startListening();

serialDynamic = ACTIVE;
modulNrf24 = MODUL_ENABLE;
initDone(true);
}
все радиомодули молчат,головной контроллер слушает эфир, когда мы хотим обратится к какому либо радиомодулю мы открываем канал radio.openWritingPipe(addresses радиомодуля)передаем запрос,модуль вываливает на ответ, ответ в буфере,а мы можем однозначно понять кто ответил т к примет запрос только тот у кого адреса совпадают
открывая разные radio.openWritingPipe(addresses радиомодуля)мы можем собрать данные с каждого модуля
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server для esp8266

Сообщение serghei » Вт авг 02, 2016 12:30 pm

Тут есть один принципиальный момент. Вы предлагаете изменить протокол.Я хочу понять как работает этот. Функция карусель запрашивает 8 - ? параметров сенсора по кругу. И главное - в ней есть упоминание номера сенсора.Так же это упоминание есть в функции
СпойлерПоказать

Код: Выделить всё


// Data

void parseData() {
  switch (rxCommand) {
    case DTA_NAME:        nrf1Name     = rxData;           makeEcho(); sendPacket(BAK_ECHO); break;
    case DTA_ID:          nrf1Id       = rxData;           makeEcho(); sendPacket(BAK_ECHO); break;
    case DTA_ADDR:        nrf1Addr     = rxAddr;           makeEcho(); sendPacket(BAK_ECHO); break;
    case DTA_FREE_MEM:    nrf1FreeMem  = rxData.toInt();   makeEcho(); sendPacket(BAK_ECHO); break;
    case DTA_BATTERY:     nrf1Battery  = rxData.toInt();   makeEcho(); sendPacket(BAK_ECHO); break;
    case DTA_HEALTH:      nrf1Health   = rxData.toInt();   makeEcho(); sendPacket(BAK_ECHO); break;
    case DTA_SELF_TEMP:   nrf1SelfTemp = rxData.toFloat(); makeEcho(); sendPacket(BAK_ECHO); break;
    case DTA_TEMP_1:      nrf1Temp1    = rxData.toFloat(); makeEcho(); sendPacket(BAK_ECHO); break;
    
       //case DTA_TEMP_2:      nrf1Temp2    = rxData.toFloat(); makeEcho(); sendPacket(BAK_ECHO); break;
    //case DTA_TEMP_3:      nrf1Temp3    = rxData.toFloat(); makeEcho(); sendPacket(BAK_ECHO); break;
    
    case DTA_VOL_1:      nrf1Vol1    = rxData.toFloat(); makeEcho(); sendPacket(BAK_ECHO); break;

// case DTA_VOL_2:      nrf1Vol2    = rxData.toFloat(); makeEcho(); sendPacket(BAK_ECHO); break;
    
  }

 
В результате при подключенных двух сенсорах в сериале АМС я вижу один запрос от базы и ответы от обоих сенсоров.Один запрос - два ответа по кругу. Теперь их надо только разложить по полкам - скорее всего по сетевому адресу или по запросам к nrf1Temp1 , nrf2Temp1 и т.д.( но при 30 сенсорах это идиотизм, или создавать массив) Тогда в Ажаксе будет просто сформировать все 8 ответов на одной вкладке С1-Temp1 , C2-Temp1 и т.д. Или идти по пути далласов - я знаю адреса всех сенсоров , жестко прописываю в коде , если пришел ответ от 20 адреса - присваиваю nrf1 , от 30-го -nrf2 .... Вот только не знаю как это сделать(((( HTM страница готова, со скриптом разберусь. Чем хороша карусель - если кто то отвалился - это сразу видно с третьей попытки. Дальше просто орать во все горло )))

Ещё как вариант предложили

Код: Выделить всё

 radio.openReadingPipe(1, addresses[1]); после это строки добавь, вкладка NRF24
radio.openReadingPipe(1, addresses[2]); 
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server для esp8266

Сообщение alexsis_76 » Вт авг 02, 2016 2:31 pm

Я хочу понять как работает этот. Функция карусель запрашивает 8 - ? параметров сенсора по кругу.
угу только я не совсем понимаю зачем, можно спросить все одним запросом
void carousel() {
#define MAX_PONY 8
currPony++;
if (currPony > MAX_PONY) {currPony = 1;}
switch (currPony) {
case 1: if (nrf1Name == "") {sendPacket(GET_NAME);} break;
case 2: if (nrf1Id == "") {sendPacket(GET_ID);} break;
case 3: if (nrf1Addr == 0) {sendPacket(GET_ADDR);} break;
case 4: if (nrf1FreeMem == 0) {sendPacket(GET_FREE_MEM);} break;
case 5: if (nrf1Battery == 0) {sendPacket(GET_BATTERY);} break;
case 6: if (nrf1SelfTemp == 0) {sendPacket(GET_SELF_TEMP);} break;
case 7: if (nrf1Health == 0) {sendPacket(GET_HEALTH);} break;
case 8: if (nrf1Temp1 == 0) {sendPacket(GET_TEMP_1);} break;
}
}
допустим зовем sendPacket(GET_NAME)
void sendPacket(byte packet) {
radio.stopListening();

switch (packet) {
case BAK_ECHO: //makePacketEcho();
break;
case GET_NAME: makePacketGetName(); break;
case GET_ADDR: makePacketGetAddress(); break;
case GET_FREE_MEM: makePacketGetFreeMem(); break;
case GET_BATTERY: makePacketGetBattery(); break;
case GET_SELF_TEMP: makePacketGetSelfTemp(); break;
case GET_HEALTH: makePacketGetHealth(); break;
case GET_ID: makePacketGetId(); break;
case GET_TEMP_1: makePacketGetTemp1(); break;
} // switch (packet)
зовем makePacketGetName()
void makePacketGetName() {makePacket(&sendGetName, TYPE_REQUEST, GET_NAME, 255, "", "");}
void makePacket(struct Sender *p, byte tpe, byte cmd, byte dest, String pwd, String dta) {
// sender
if (p->required) {p->active = true; p->success = false;}
else {p->active = false; p->success = true;}

p->command = cmd;
p->timer = millis();

byte type;
if (p->type) {type = p->type;}
else {type = tpe;}

// packet
buffTx[POS_TYPE] = type;
buffTx[POS_COMMAND] = cmd;
//////////////buffTx[POS_ADDRESS] = eeAddress;
buffTx[POS_DEST] = dest;
buffTx[POS_REQUIRED] = p->required;
buffTx[POS_NUMBER] = p->number;

clearTxRegion(POS_PASSWORD, PACKET_MAX_BYTES);
setTxRegion(POS_PASSWORD, pwd);
setTxRegion(POS_DATA, dta);
}
обрати внимание на
//////////////buffTx[POS_ADDRESS] = eeAddress;
все работают на одном канале без адреса, значит один запрос количество ответов=количеству сенсоров как будем разгребать ответ?
в коде сенсора
void makePacket(struct Sender *p, byte tpe, byte cmd, byte dest, String pwd, String dta) {
// sender
if (p->required) {p->active = true; p->success = false;}
else {p->active = false; p->success = true;}

p->command = cmd;
p->timer = millis();

byte type;
if (p->type) {type = p->type;}
else {type = tpe;}

// packet
buffTx[POS_TYPE] = type;
buffTx[POS_COMMAND] = cmd;
buffTx[POS_ADDRESS] = eeAddress;
buffTx[POS_DEST] = dest;
buffTx[POS_REQUIRED] = p->required;
buffTx[POS_NUMBER] = p->number;

clearTxRegion(POS_PASSWORD, PACKET_MAX_BYTES);
setTxRegion(POS_PASSWORD, pwd);
setTxRegion(POS_DATA, dta);

p->required = true;
}
сенсор свой адрес пишет и ты его видишь
Чем хороша карусель - если кто то отвалился - это сразу видно с третьей попытки
она не правильно работает если нет адреса и сенсор один то все нормально, а если несколько то к кому мы обращаемся?
аналогично работает 1WARE если датчик 1 то можем не передавать адрес, если несколько то обязаны адресовать иначе все далласы начинают передачу одновременно и обмен падает, так вот тебе надо разделить сенсоры или по трубам или по адресам
За это сообщение автора alexsis_76 поблагодарил:
serghei (Вт авг 02, 2016 2:58 pm)
Рейтинг: 1.16%
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server для esp8266

Сообщение Alex » Вт авг 02, 2016 7:28 pm

тебе надо разделить сенсоры или по трубам или по адресам
Предполагалось делить по адресам, труб на все сенсоры заведомо не хватит, а адресов 254. Я собираюсь собрать тестовую конфигурацию на 5 сенсоров (четыре на батарейках — температуры, задымления, протечки и контактный и один «умный» актуатор — реле для света.

В процессе создам механизм «разгребания» по адресам и, естественно, выложу код — посмотрите как что сделано.
Ответить