Arduino Mega Server
Модератор: Alex
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: Arduino Mega Server
Я давно уже предложил ,но не успел ))). А назвать её " Библиотека решений для АМС" и в шапку хотя бы давать ссылки на обсуждения. Даже Вы выкладываете исправления , а через месяц их не найти ни на форуме,ни в компе.(((
Правда она будет сильно пересекаться с прикручиванием железа. У себя нашел еще одну версию управлением реле с уже готовой страницы. Не помню кто и где выкладывал. Если еще позволит форум, то тут перезалью.
Правда она будет сильно пересекаться с прикручиванием железа. У себя нашел еще одну версию управлением реле с уже готовой страницы. Не помню кто и где выкладывал. Если еще позволит форум, то тут перезалью.
Последний раз редактировалось serghei Чт апр 06, 2017 5:00 pm, всего редактировалось 1 раз.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
- ser009
- Сообщения: 595
- Зарегистрирован: Сб окт 13, 2012 9:55 am
- Благодарил (а): 4 раза
- Поблагодарили: 43 раза
Re: Arduino Mega Server
Немного разобрался с вводом значений с Web->Arduino.
Готовлю небольшой пример управления настройками аналогового сигнала с Веба
Думаю при отладке очень удобно будет пользоваться
Готовлю небольшой пример управления настройками аналогового сигнала с Веба
Думаю при отладке очень удобно будет пользоваться
СпойлерПоказать
Re: Arduino Mega Server
После включения аутентификации AMS не доступен из интернета, как будто перестает работать переадресация портов. Это проблема в роутере или в AMS? У кого нибудь работает аутентификация с переадресацией портов?
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Наконец-то у знатоков С и системного программирования появилась возможность блеснуть своими знаниями и перейти от декларативных заявлений к делу. 
Суть вопроса такова: в АМС уже давно присутствует конструкция
Что очень неудобно и желательно автоматизировать процесс переключения библиотек, например, в зависимости от значения
Но не тут-то было, всеми мыслимыми и немыслимыми способами не удалось построить конструкцию из директив условной компиляции, которая переключала бы библиотеки в зависимости определения (или не определения) ETHERNET_LIBRARY.
Найдутся ли среди нас такие специалисты?

Суть вопроса такова: в АМС уже давно присутствует конструкция
Код: Выделить всё
// W5100
#include <Ethernet.h>
#include <EthernetUdp.h>
// W5500
//#include <Ethernet2.h>
//#include <EthernetUdp2.h>
Код: Выделить всё
#define ETHERNET_LIBRARY
Найдутся ли среди нас такие специалисты?
- ser009
- Сообщения: 595
- Зарегистрирован: Сб окт 13, 2012 9:55 am
- Благодарил (а): 4 раза
- Поблагодарили: 43 раза
Re: Arduino Mega Server
Сделай на примере авторизации.
Заведи переменную и меняй её с веб странички, после изменения перезапускай АМС.
Значения по умолчанию хранить в EEprom или на sd (у DUE нет EEPROM)
Заведи переменную и меняй её с веб странички, после изменения перезапускай АМС.
Значения по умолчанию хранить в EEprom или на sd (у DUE нет EEPROM)
Код: Выделить всё
// 0 - W5100
// 1 - W5500
switch (ETH) {
label 0:
#include <Ethernet.h>
#include <EthernetUdp.h>
break;
label 1:
#include <Ethernet2.h>
#include <EthernetUdp2.h>
break;
default:
#include <Ethernet.h>
#include <EthernetUdp.h>
}
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Ответ никуда не годится — если у человека не тот шилд, то он вообще никогда не получит доступа к веб-странице, потому что АМС просто не запустится.
Во-вторых у меня большие сомнения в работоспособности этой конструкции. Я бы сказал что этот код не будет работать.
И в третьих в задаче спрашивалось о переключении при помощи директив условной компиляции.
Во-вторых у меня большие сомнения в работоспособности этой конструкции. Я бы сказал что этот код не будет работать.
И в третьих в задаче спрашивалось о переключении при помощи директив условной компиляции.
- ser009
- Сообщения: 595
- Зарегистрирован: Сб окт 13, 2012 9:55 am
- Благодарил (а): 4 раза
- Поблагодарили: 43 раза
Re: Arduino Mega Server
Значения можно хранить на SD. Можно просто поправить 0 на 1Alex писал(а):Ответ никуда не годится — если у человека не тот шилд, то он вообще никогда не получит доступа к веб-странице, потому что АМС просто не запустится.
Встречный вопрос
Что сложного закоментировать 2 строчки в коде? Тем более что все так подробно описано. Просто применяя проект на практике мало вероятно что кто-то начнет менять туда сюда шилды. Обычно поставил, настроил и забыл про него.
-
- Сообщения: 792
- Зарегистрирован: Пт янв 22, 2016 10:08 am
- Благодарил (а): 6 раз
- Поблагодарили: 63 раза
Re: Arduino Mega Server
Да честно говоря удивлен,#include то директива препроцессора,а switch это исполняемая инструкция,чувствуете разницу?switch (ETH) {
label 0:
#include <Ethernet.h>
#include <EthernetUdp.h>
break;
label 1:
#include <Ethernet2.h>
#include <EthernetUdp2.h>
break;
default:
#include <Ethernet.h>
#include <EthernetUdp.h>
}
Alex вы ведь писали код у Вас там прямо напичкано директивами условной компиляции,тогда у вас все работало,а почему сейчас нет?Наконец-то у знатоков С и системного программирования появилась возможность блеснуть своими знаниями и перейти от декларативных заявлений к делу.
#ifdef SD_INFO_FEATURE
sdInfoInit();
#endif
#define STACK_USE_REBOOT_SERVERвот пример включения целого файла через директиву
#if defined(STACK_USE_REBOOT_SERVER)
#include "TCPIP Stack/TCPIP.h"
#define REBOOT_PORT 69 // UDP TFTP port
// For improved security, you might want to limit reboot capabilities
// to only users on the same IP subnet. Define REBOOT_SAME_SUBNET_ONLY
// to enable this access restriction.
#define REBOOT_SAME_SUBNET_ONLY
extern NODE_INFO remoteNode;
/*********************************************************************
* Function: void RebootTask(void)
*
* PreCondition: Stack is initialized()
*
* Input: None
*
* Output: None
*
* Side Effects: None
*
* Overview: Checks for incomming traffic on port 69.
* Resets the PIC if a 'R' is received.
*
* Note: This module is primarily for use with the
* Ethernet bootloader. By resetting, the Ethernet
* bootloader can take control for a second and let
* a firmware upgrade take place.
********************************************************************/
void RebootTask(void)
{
static UDP_SOCKET MySocket = INVALID_UDP_SOCKET;
struct
{
BYTE vMACAddress[6];
DWORD dwIPAddress;
WORD wChecksum;
} BootloaderAddress;
if(MySocket == INVALID_UDP_SOCKET)
MySocket = UDPOpen(REBOOT_PORT, NULL, INVALID_UDP_PORT);
if(MySocket == INVALID_UDP_SOCKET)
return;
// Do nothing if no data is waiting
if(!UDPIsGetReady(MySocket))
return;
#if defined(REBOOT_SAME_SUBNET_ONLY)
// Respond only to name requests sent to us from nodes on the same subnet
if((remoteNode.IPAddr.Val & AppConfig.MyMask.Val) != (AppConfig.MyIPAddr.Val & AppConfig.MyMask.Val))
{
UDPDiscard();
return;
}
#endif
// Get our MAC address, IP address, and compute a checksum of them
memcpy((void*)&BootloaderAddress.vMACAddress[0], (void*)&AppConfig.MyMACAddr.v[0], sizeof(AppConfig.MyMACAddr));
BootloaderAddress.dwIPAddress = AppConfig.MyIPAddr.Val;
BootloaderAddress.wChecksum = CalcIPChecksum((BYTE*)&BootloaderAddress, sizeof(BootloaderAddress) - sizeof(BootloaderAddress.wChecksum));
// To enter the bootloader, we need to clear the /POR bit in RCON.
// Otherwise, the bootloader will immediately hand off execution
// to us.
#if defined(USE_LCD)
strcpypgm2ram((char*)LCDText, "Bootloader Reset");
LCDUpdate();
#endif
RCONbits.POR = 0;
#if defined(__18CXX)
{
WORD_VAL wvPROD;
wvPROD.Val = ((WORD)&BootloaderAddress);
PRODH = wvPROD.v[1];
PRODL = wvPROD.v[0];
}
#endif
Reset();
}
#endif //#if defined(STACK_USE_REBOOT_SERVER)
кстати только сейчас увидел ,а почему label,а не case
вроде switch case
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Вы не понимаете: переключение с веб-страницы вообще не имеет смысла — владелец железа практически никогда не меняет свой шилд.Значения можно хранить на SD. Можно просто поправить 0 на 1
Потом ваш код предполагает использование компиляции (то есть для работы он должен быть уже откомпилирован) и при этом пытается управлять подключением библиотеки, которую только предстоит откомпилировать — это просто не будет работать, для этого и нужны директивы условной компиляции.
Смотрите шире: автоматизация подключения той или иной библиотеки позволяет изменением одного макроса изменять множество параметров проекта и автоматически создавать разные сборки.Встречный вопрос
Что сложного закоментировать 2 строчки в коде? Тем более что все так подробно описано. Просто применяя проект на практике мало вероятно что кто-то начнет менять туда сюда шилды. Обычно поставил, настроил и забыл про него.
Изменением одного значения, а не лазаньем по коду и выискивание десятков мест, где нужно что-то закомментировать вручную.
Хороший вопрос. Это всё действительно прекрасно работает, но отказывается работать с конструкциями типаAlex вы ведь писали код у Вас там прямо напичкано директивами условной компиляции,тогда у вас все работало,а почему сейчас нет?
Код: Выделить всё
#include <Ethernet.h>