Arduino Mega Server

Модератор: Alex

Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

Доброго времени суток.
(Ох чувствую закидают меня камнями...)
Небольшая предыстория
Решили мы всей группой делать курсовые и дипломные проекты на arduino. До этого дел никаких не имели мы с программированием во всех смыслах этого термина.
Но что уж тут поделать? <<Если решили, то будем делать.">> - подумал я и закупил себе мегу, шилд 5100 и пару датчиков. Но вот пришла пора решать что именно мы будем делать. И пока мой комплект ехал ко мне из столицы, все простые проекты разобрали. <<Но да ладно, оно так даже интереснее!>> - решил я и стал думать, что можно собрать из горочки всех, доселе невиданных, мне вещей. Начал писать обычную web-страницу, ну... Не писать конечно же, а собирать по крупицам из интернета, попутно уча C/C++. Но в один прекрасный момент преподаватель сказал: <<Посмотри Arduino Mega Server. Там ты что-то интереснее обычной страницы с показаниями датчиков сделаешь.>> Ну я и посмотрел... На энтузиазме скачал. Попытался запустить. Но ams упирался до последнего. :D (Видимо даже он понял, что мне лучше сюда не лезть) Спустя неделю я всё же победил IDE и запустил сервер. И тут-то началось самое интересное :D
<<Куда мне писать код для своих датчиков? Как это всё вывести на сервер? Как вообще поменять внешний вид сайта?>> Ох и завлекла же меня вся эта тема...
Нужно сказать спасибо автору. Потому что я уже хоть что-то понимаю в C/C++, HTML,CSS. СПАСИБО АВТОР^^
Но не всё так "лампово"...
Проблемы.
Решил вывести показания температуры на Dash-панель.
На руках имеется AM2320-trema. Вот даже картиночка данного датчика^^ Изображение
Рассмотрев модуль rtemp примерно понял что и как писать. Ну и набросал модуль по образу и подобию готового.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
#include <Wire.h>//I2C
#include <iarduino_AM2320.h> //датчик температуры и влажности

iarduino_AM2320 sensor;
byte const MAX_TEMP_SENSORS = 1;
char objSens[MAX_TEMP_SENSORS][12] = {"tempSTR",};
float current_temp[MAX_TEMP_SENSORS];
float temp_[MAX_TEMP_SENSORS];

void dtempInit(){
sensor.begin();
Serial.print("Module AM2320 \n" );
}

void dtempWorks() {
sensor.read();
temp_[0]=sensor.tem;
temp_[1]=sensor.hum;
Serial.println(temp_[0]);
getTemperature(0);
}

void getDTemperature(byte n) {
current_temp[n] = temp_[n];
if (!isnan(current_temp[n])) {
Serial.print(objSens[n]);
Serial.print(": ");
Serial.println(current_temp[n]);
}

}

#endif
На главной вкладке AMS опять же прописал (я не знаю как это правильно называть... Наверное, объявил, да?)
SPOILERSPOILER_SHOW
//#define TEMP_FEATURE
#define DTEMP_FEATURE
.
.
.
#ifdef TEMP_FEATURE
tempInit();
#endif
#ifdef DTEMP_FEATURE
dtempInit();
#endif
.
.
.
#ifdef TEMP_FEATURE
if (cycle5m) {
tempWorks();
}
#endif
#ifdef DTEMP_FEATURE
if (cycle5m) {
dtempWorks();
}
#endif
Т.е. я по сути просто заменил rtemp своим dtemp и на dash-панели, как я думал, должна была появится температура с моего датчика. Но IDE опять хорошенечко так меня пнула.
Помогите пожалуйста понять нулю в программирование, что это за ошибка.
SPOILERSPOILER_SHOW
Arduino: 1.6.5 (Windows 8.1), Плата"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

arduino_mega_server.cpp.o: In function `dtempWorks()':
E:\Arduino/rtemp.ino:26: undefined reference to `getTemperature(unsigned char)'
collect2.exe: error: ld returned 1 exit status

Ошибка компиляции.
IDE 1.6.5 скачана на сайте AMS.
Надеюсь тапками бить не будете.
><
U.P.D.
Проблема решена.
Исправил
void getDTemperature(byte n)
на
void getTemperature(byte n)
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

попробуйте поместите функцию getDTemperature перед вызовом dtempWorks
Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

И снова я со своим AM2320...
Переделал модуль заново. Потому что с тем запутался, да так что распутаться с моими знаниями невозможно.
Писал уже не по примеру имеющегося, а как подсказывало воображение.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
#include <iarduino_AM2320.h> //датчик температуры и влажности
iarduino_AM2320 sensor;
int A; //переменная для хранения показаний с датчика
void dtempInit() {
sensor.begin(); //пнул датчик, чтобы работал
}

void dtempWork() {
sensor.read();//читаем показания с датчика
A=sensor.tem;//записываем показания температуры в переменную А
}
#endif
В server_ajax добавил пару строк.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
s += makeTag("tempHOM", "", String(A));
#endif
*модуль rtemp отключен.
В dash.js добавил
SPOILERSPOILER_SHOW
try {
var tempHOM = this.responseXML.getElementsByTagName('tempHOM')[0].childNodes[0].nodeValue;
} catch (err) {
tempHOM = "-";
}

try {
var dtempHOM_ = Math.round(tempHOM, 1);
document.getElementById("temp-home").innerHTML = tempHOM_ + "°";
document.getElementById("temp-home-hide").innerHTML = tempHOM_ + "°";
} catch (err) { }
В _dash.html так же прописал
SPOILERSPOILER_SHOW
<p>Дома: <span class="value" id="temp-home-hide">...</span> C</p>
<p>Дома: <span class="value" id="temp-home">...</span> C</p>
Т.е. с файлами .js и .html строго следовал инструкции.
И естественно у меня ничего не вышло.
Точнее скетч компилируется, сервер запускается. Но температура на dash-панели показываться не хочет. Вместо неё просто три точки.
Помогите пожалуйста. Хотя бы ссылочку на полезную для данной темы статью пожертвуйте. Сам я, увы, никакой полезной информации найти не могу.
Только не бейте, пожалуйста. :cry:
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

Получилось вытащить показания в даш-панель? Тогда велком в тему " Визуализация" ! Когда на защите диплома покажите в телефоне спидометр с Вашей температурой, первое место будет обеспечено!))))
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

serghei писал(а):Получилось вытащить показания в даш-панель? Тогда велком в тему " Визуализация" ! Когда на защите диплома покажите в телефоне спидометр с Вашей температурой, первое место будет обеспечено!))))
Получилось вытащить только слово "Дома" :D
Но я уже побежал в визуализацию. Вы меня очень заинтриговали.
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

В 016 версии немного по другому организованы скрипты, но попробую . Три точки говорят о том , что serverAjax не видит переменную вообще или она не задана.Если даже где то накосячить , то ажакс отработает
SPOILERSPOILER_SHOW

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

     // Temperature
         
          try {
            var tempSTR = this.responseXML.getElementsByTagName('tempSTR')[0].childNodes[0].nodeValue;
          } catch (err) {
              tempSTR = "99";// тут ставьте осмысленное , но не реальное число.Легче увидеть ошибку
            }  
И скорее всего
SPOILERSPOILER_SHOW

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

try {
var dtempHOM_ = Math.round(tempHOM, 1); // попробуйте var tempHOM_.............................
document.getElementById("temp-home").innerHTML = tempHOM_ + "°";
document.getElementById("temp-home-hide").innerHTML = tempHOM_ + "°";
} catch (err) { }
И какие ошибки выдает браузер в режиме просмотра кода элемента ? А еще лучше выложи сюда его скрин.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

serghei писал(а):В 016 версии немного по другому организованы скрипты, но попробую . Три точки говорят о том , что serverAjax не видит переменную вообще или она не задана.Если даже где то накосячить , то ажакс отработает
SPOILERSPOILER_SHOW

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

     // Temperature
         
          try {
            var tempSTR = this.responseXML.getElementsByTagName('tempSTR')[0].childNodes[0].nodeValue;
          } catch (err) {
              tempSTR = "99";// тут ставьте осмысленное , но не реальное число.Легче увидеть ошибку
            }  
И скорее всего
SPOILERSPOILER_SHOW

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

try {
var dtempHOM_ = Math.round(tempHOM, 1); // попробуйте var tempHOM_.............................
document.getElementById("temp-home").innerHTML = tempHOM_ + "°";
document.getElementById("temp-home-hide").innerHTML = tempHOM_ + "°";
} catch (err) { } 
И какие ошибки выдает браузер в режиме просмотра кода элемента ? А еще лучше выложи сюда его скрин.
Разобрался! Наверное.
Температуру вывел, как оказалось, а может всё не так и я просто что-то нужное случайно сделал, помимо _dash код нужно было поменять так же и в _DASH_HK.
Спасибо за то что отозвались.
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

Так расскажи что сделал и что поменял. Другим то же интересно.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Android2i2
Сообщения: 18
Зарегистрирован: Вс фев 05, 2017 2:19 pm
Контактная информация:

Re: Arduino Mega Server

Сообщение Android2i2 »

serghei писал(а):Так расскажи что сделал и что поменял. Другим то же интересно.
Скетч практически не трогал, только подключил библиотеку i2c.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
#include <iarduino_AM2320.h> //датчик температуры и влажности
#include <Wire.h>
iarduino_AM2320 sensor;
int A; //переменная для хранения показаний с датчика
void dtempInit() {
sensor.begin(); //пнул датчи, чтобы работал
}
void dtempWorks() {
sensor.read();//читаем показания с датчика
A=sensor.tem;//записываем показания температуры в переменную А
}
#endif

В ajax опять же ничего не менял.
SPOILERSPOILER_SHOW
#ifdef DTEMP_FEATURE
s += makeTag("dtempHOME", "", String(A));
#endif
А вот с dash.js решил не заморачиваться и просто прописал свой тег вместо имеющегося.
SPOILERSPOILER_SHOW
// Temperature
try {
var tempSTR = this.responseXML.getElementsByTagName('dtempHOME')[0].childNodes[0].nodeValue;
} catch (err) {
tempSTR = "-";
}

// Voltage & power
try {
var dvolt = this.responseXML.getElementsByTagName('voltage')[0].childNodes[0].nodeValue;
} catch (err) {
dvolt = "0";
}
try {
var dvoltage = Math.round(parseInt(dvolt), 0);
/* document.getElementById("dash-voltage").innerHTML = dvoltage;
document.getElementById("dash-voltage-hide").innerHTML = dvoltage; */
var tempSTR_ = Math.round(tempSTR, 1);
document.getElementById("dash-voltage").innerHTML = tempSTR_ + "°";
document.getElementById("dash-voltage-hide").innerHTML = tempSTR_ + "°";
} catch (err) { }
dash.html и dash_hk.html заменил "На улице" на "Дома"
SPOILERSPOILER_SHOW
<p>Дома: <span class="value" id="dash-voltage-hide">...</span> C</p>
И показания свои получил.
Вложения
Скриншот 06-02-2017 154526.png
Скриншот 06-02-2017 154526.png (30.12 КБ) 12122 просмотра
Arduino Mega 2560 + Ethernet 5100
Windows 10
IDE 1.6.5

Уровень знаний: Пещерный человек
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

Отлично ! Теперь воткни на SD карту файл Full18.htm отсюда viewtopic.php?f=19&t=3168&start=30#p40876. И замени
SPOILERSPOILER_SHOW

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

function getFull18Data() {
  var request = new XMLHttpRequest();
  request.onreadystatechange = function() {
    if (this.readyState == 4) {
      if (this.status == 200) {
        if (this.responseXML != null) {
          // net activ
          insertTick(30, bufferCpuLoad2);
       
         try {
                data_val7 = this.responseXML.getElementsByTagName('tmpTemp')[0].childNodes[0].nodeValue;// tmpTemp замени на свой 'dtempHOME'
            } catch (err) {
                data_val7 = "99";
            }
            
            
        
        }
      }
    }
  } // request.onreadystatechange = function()    
И на выходе получишь такую же картинку. С лишним кодом думаю разберешься сам. Удачи!

PS На месте второго спидометра прицепи влажность ))))
Последний раз редактировалось serghei Пн фев 06, 2017 9:24 pm, всего редактировалось 1 раз.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Ответить