Страница 44 из 119

Re: Arduino Mega Server для esp8266

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

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

Что тут непонятного и зачем притягивать за уши сопроцессоры и обработку 3D силами самого контроллера (что очевидный бред, по крайней мере на данном этапе развития технологий)?

Re: Arduino Mega Server для esp8266

Добавлено: Вт авг 02, 2016 9:33 am
alexsis_76
честные интерактивные 3D сцены
а на меге были не честные?

Re: Arduino Mega Server для esp8266

Добавлено: Вт авг 02, 2016 9:44 am
Alex
а на меге были не честные?
В смысле? (прям беда с этим 3D, одно сплошное непонимание)

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

Надеюсь, так будет понятно.

Re: Arduino Mega Server для esp8266

Добавлено: Вт авг 02, 2016 9:51 am
serghei
Ребята, давайте завяжем выяснять крутизну покемонов против телепузиков в этой теме. Мне нравится позиция Алекса в части обучения программированию. Медленно ,но верно ползу к заветной цели.После третьего пинка в нужном направлении получилась такая картинка. Теперь дело за кодом.

Re: Arduino Mega Server для esp8266

Добавлено: Вт авг 02, 2016 9:57 am
Alex
Ребята, давайте завяжем выяснять крутизну покемонов против телепузиков в этой теме.
На мой взгляд, serghei являет собой редкий пример адекватного и вменяемого пользователя. Ничего не требует и работает головой и руками. :) Молодец

Re: Arduino Mega Server для esp8266

Добавлено: Вт авг 02, 2016 10:08 am
serghei
Да я уже достал всех знакомых профессиональных программистов. Нет, но через заднее слуховое отверстие я получаю данные с двух сенсоров и браузер их показывает ,но не может определить от кого что свалилось.Думаем дальше....

Re: Arduino Mega Server для esp8266

Добавлено: Вт авг 02, 2016 11:22 am
alexsis_76
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 радиомодуля)мы можем собрать данные с каждого модуля

Re: Arduino Mega Server для esp8266

Добавлено: Вт авг 02, 2016 12:30 pm
serghei
Тут есть один принципиальный момент. Вы предлагаете изменить протокол.Я хочу понять как работает этот. Функция карусель запрашивает 8 - ? параметров сенсора по кругу. И главное - в ней есть упоминание номера сенсора.Так же это упоминание есть в функции
SPOILERSPOILER_SHOW

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


// 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]); 

Re: Arduino Mega Server для esp8266

Добавлено: Вт авг 02, 2016 2:31 pm
alexsis_76
Я хочу понять как работает этот. Функция карусель запрашивает 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 то можем не передавать адрес, если несколько то обязаны адресовать иначе все далласы начинают передачу одновременно и обмен падает, так вот тебе надо разделить сенсоры или по трубам или по адресам

Re: Arduino Mega Server для esp8266

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

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