Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Модератор: immortal
-
- Сообщения: 24
- Зарегистрирован: Вт сен 30, 2014 3:36 am
- Благодарил (а): 1 раз
- Поблагодарили: 0
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Надо смотреть какие порты прописаны в библиотеке
-
- Сообщения: 309
- Зарегистрирован: Вт сен 17, 2013 10:11 pm
- Благодарил (а): 3 раза
- Поблагодарили: 56 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Написано же, что пин 10 "is used to select the W5100", пин 4 "for the SD card".Arduino communicates with both the W5100 and SD card using the SPI bus (through the ICSP header). This is on digital pins 10, 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used to select the W5100 and pin 4 for the SD card. These pins cannot be used for general I/O. On the Mega, the hardware SS pin, 53, is not used to select either the W5100 or the SD card, but it must be kept as an output or the SPI interface won't work.
Если юзаете ардуино UNO и шилд на W5100, то заняты как мимум пины 10, 11, 12, 13. Если еще пользуетесь SD-картой, то занят пин 4.
Если юзаете ардуино мега и шилд на W5100, то заняты как мимум пины 10, 50, 51, 52. Если еще пользуетесь SD-картой, то занят пин 4.
По опыту - не советую юзать пин 4 даже если не занят.
Не советую юзать пин0, пин1 если используете уарт (отладку по ЮСБ к примеру).
- Рейтинг: 1.16%
-
- Сообщения: 24
- Зарегистрирован: Вт сен 30, 2014 3:36 am
- Благодарил (а): 1 раз
- Поблагодарили: 0
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Сутки уже не сплю. Вообще ничего не могу перенести на Мажор. Помогите перетянуть температуру на сервер, пошагово. Пример с сайта у меня никак не хочет идти, я его уже и так и сяк. Программой Ардуино 0017 в мою мегу не заливаетса. Выбор Меги 2560 появился с версии 0020, в которой я компилирую и заливаю в апарат прошивку, но нет ни каких признаков, корме как на шилде подмигивают светодиоды. Не пингуетса, в мониторе порта тишина. Начал пробовать заново писать на более новой версии ардуино 1.5.2. В ней код немного по другому строитса и библиотеки другие. Шилд цепляю, ип получает и пингуетса, с сервером конектитса , по крайней мере монитор порта так говорит. Подключаю 18В20, температуру кажет в мониторе. Добовляю строку sprintf(buf, "GET /objects/?object=sensorKotel&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)sensor, abs(sensor1));. И ничего никуда не переносица. Уже совсем голова не знаю в какую сторону рулить. Может поможете пошагово пройти данную операцию, дальше уже думаю смогу сам. Для начала помогите прикрутит 18В20 что би на Мажоро выводил. А дальше уж как нибуть разберус думаю.
-
- Сообщения: 309
- Зарегистрирован: Вт сен 17, 2013 10:11 pm
- Благодарил (а): 3 раза
- Поблагодарили: 56 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Поиск по форуму? Не - не слышал...janlam писал(а):Сутки уже не сплю. Вообще ничего не могу перенести на Мажор. Помогите перетянуть температуру на сервер, пошагово. Пример с сайта у меня никак не хочет идти, я его уже и так и сяк. Программой Ардуино 0017 в мою мегу не заливаетса. Выбор Меги 2560 появился с версии 0020, в которой я компилирую и заливаю в апарат прошивку, но нет ни каких признаков, корме как на шилде подмигивают светодиоды. Не пингуетса, в мониторе порта тишина. Начал пробовать заново писать на более новой версии ардуино 1.5.2. В ней код немного по другому строитса и библиотеки другие. Шилд цепляю, ип получает и пингуетса, с сервером конектитса , по крайней мере монитор порта так говорит. Подключаю 18В20, температуру кажет в мониторе. Добовляю строку sprintf(buf, "GET /objects/?object=sensorKotel&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)sensor, abs(sensor1));. И ничего никуда не переносица. Уже совсем голова не знаю в какую сторону рулить. Может поможете пошагово пройти данную операцию, дальше уже думаю смогу сам. Для начала помогите прикрутит 18В20 что би на Мажоро выводил. А дальше уж как нибуть разберус думаю.

-
- Сообщения: 24
- Зарегистрирован: Вт сен 30, 2014 3:36 am
- Благодарил (а): 1 раз
- Поблагодарили: 0
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Благадарствую,
Уже сам запутался, столько всего перепробывал. Голова кругом идёт. Данный залил тоже трабла. Открываю датчики , а в ответ EPIC FAIL. Внизу скетч который у меня исправнё идёт. Может разок опишите как в МДМ освоит температуру, буду премного благодарен. Хочетса уже чего то в реале увидеть, а то головолломка. Спасибо заранее.
/**
* Контроллер-исполнительное устройство (к проекту http://smartliving.ru/)
* Platform: Arduino UNO R3 + EthernetShield W5100
* IDE: Arduino 1.0.1
*
* исполнительные устройства (реле) подключены к Digital 8 - 13
*
* /
* обращение по http://xx.xx.xx.xx/ выдаст справочную информацию по этому устройству (нужно для того, чтобы когда обращаешься
* по IP к устройству понять что это за контроллер и пр.)
*
* /state - состояние всез портов
* /command - выполнение команды
* команды можно вызывать серией в 1 запросе. Например http://xx.xx.xx.xx/command?3=CLICK&4=CLICK&5=ON&6=OFF
* только длинна строки запроса не должна привышать maxLength
* /getdev - получить список всех устройст на 1-wire
* формат вывода:
* T<номер устройства на шине>:<HEX адрес устройства>:<текущая температура в градусах цельсия>;[...]
* (пример T0:1060CF59010800E3:24.06;T1:109ABE59010800FE:24.56;)
*
*
**/
#include <Ethernet.h>
#include <SPI.h>
#include <Arduino.h>
#include "WebServer.h"// Webduino (https://github.com/sirleech/Webduino)
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE4, 0xDE, 0x35 }; // MAC-адрес нашего устройства
byte ip[] = { 192, 168, 1, 120 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 1, 1 };
byte dns_server[] = { 192, 168, 1, 1 };
// ip-адрес удалённого сервера
byte rserver[] = { 192, 168, 1, 130 };
// Настройки выходов
int startPort=4;
int endPort=9;
// Настойка аналоговых входов
int startAn=1;
int endAn=3;
// Настройка входов
//int startPin=1;
//int endPin=5;
int old_entry=0;
char buf[80];
#define MAX_PINS 4 //здесь указываем максимальное количество входоа 4
const byte pin_array[MAX_PINS] = { 3, 4, 5, 6 }; //номера используемых пинов
byte val_array[MAX_PINS] ={ 0, 0, 0, 0 }; //предыдущие значения для каждого порта
// Pin controller for connection data pin DS18S20
#define ONE_WIRE_BUS 2 // Digital 2 pin Arduino (куда подключен выход с шины датчиков DS18X20
#define TEMPERATURE_PRECISION 9
#define VERSION_STRING "0.1"
#define COMPILE_DATE_STRING "2012-09-18"
P(Page_info) = "<html><head><title>smartliving.ru controller " VERSION_STRING "</title></head><body>\n";
P(location_info) = "underground server room";
P(pin_info) = "D2 - 1-wire (many DS18S20)<br>D3-light undergroung";
P(version_info) = VERSION_STRING ". Compile date: " COMPILE_DATE_STRING;
String url = String(60);
int maxLength=50; // Максимальная длинна строки запроса
#define delayClick 1000 // задержка при обычном CLICK
#define delayLClick 3000 // задержка при длинном LCLICK
#define MAX_COMMAND_LEN (10)
#define MAX_PARAMETER_LEN (10)
#define COMMAND_TABLE_SIZE (9)
#define PREFIX ""
WebServer webserver(PREFIX, 80);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Для поиска
DeviceAddress Termometers;
float tempC;
#define NAMELEN 32
#define VALUELEN 32
char gCommandBuffer[MAX_COMMAND_LEN + 1];
char gParamBuffer[MAX_PARAMETER_LEN + 1];
long gParamValue;
typedef struct {
char const *name;
void (*function)(WebServer &server);
} command_t;
command_t const gCommandTable[COMMAND_TABLE_SIZE] = {
// {"LED", commandsLed, },
{"HELP", commandsHelp, }, // Выводит список комманд (вызов http://xx.xx.xx.xx/command?8=HELP )
{"ON", commandsOn, }, // Устанавливает "1" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=ON )
{"OFF", commandsOff, }, // Устанавливает "0" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=OFF )
{"STATUS", commandsStatus, }, // Получить состояние цифрового порта (1 или 0) (вызов http://xx.xx.xx.xx/command?8=STATUS ),
// если вместо номера порта передать ALL (вызов http://xx.xx.xx.xx/command?ALL=STATUS ), то получим состояние всех портов (Пример вывода P3=0;P4=0;P5=0;P6=0;P7=0;P8=1;P9=1;)
{"CLICK", commandsClick, }, // Кратковременная "1" на порту 1сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=CLICK )
{"LCLICK", commandsLClick, }, // Кратковременная "1" на порту 3сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=LCLICK )
{"AN", commandsAn, },
{NULL, NULL }
};
/**********************************************************************************************************************
*
* Function: cliProcessCommand
*
* Description: Look up the command in the command table. If the
* command is found, call the command's function. If the
* command is not found, output an error message.
*
* Notes:
*
* Returns: None.
*
**********************************************************************/
void cliProcessCommand(WebServer &server)
{
int bCommandFound = false;
int idx;
gParamValue = strtol(gParamBuffer, NULL, 0); // Convert the parameter to an integer value. If the parameter is empty, gParamValue becomes 0.
for (idx = 0; gCommandTable[idx].name != NULL; idx++) { // Search for the command in the command table until it is found or the end of the table is reached. If the command is found, break out of the loop.
if (strcmp(gCommandTable[idx].name, gCommandBuffer) == 0) {
bCommandFound = true;
break;
}
}
if (bCommandFound == true) { // Если команда найдена (в массиве команд), то выполняем ее. Если нет - игнорируем
(*gCommandTable[idx].function)(server);
}
else { // Command not found
server.print("ERROR: Command not found");
}
}
/**********************************************************************************************************************/
/* Обработчики команд */
void commandsAn(WebServer &server) {
int anValue;
if (gParamValue>=startAn && gParamValue<=endAn)
anValue = analogRead(gParamValue);
Serial.print("Analog");
Serial.print(gParamValue);
Serial.print("=");
Serial.println(anValue);
}
void commandsOn(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,HIGH);
EEPROM.write(gParamValue,HIGH);
//Serial.print("Port "); //для отладки
//Serial.print(gParamValue); //для отладки
//Serial.println(" = ON"); //для отладки
} else ErrorMessage(server);
}
void commandsOff(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,LOW);
EEPROM.write(gParamValue,LOW);
//Serial.print("Port "); //для отладки
//Serial.print(gParamValue); //для отладки
//Serial.println(" = OFF"); //для отладки
} else ErrorMessage(server);
}
void commandsClick(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,HIGH);
delay(delayClick);
digitalWrite(gParamValue,LOW);
} else ErrorMessage(server);
}
void commandsLClick(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,HIGH);
delay(delayLClick);
digitalWrite(gParamValue,LOW);
} else ErrorMessage(server);
}
void commandsStatus(WebServer &server) {
if (strcmp(gParamBuffer, "ALL") == 0) { // выдать состояние всех пинов
for(int i=startPort;i<=endPort;i++) {
int st=digitalRead(i);
char my_st[5];
itoa(st,my_st,10);
server.print("P");
server.print(i);
server.print("=");
server.print(my_st);
server.print(";");
}
} else { // выдать состояние только 1 пина
if (gParamValue>=startPort && gParamValue<=endPort) {
server.print("P");
server.print(gParamValue);
server.print("=");
server.print(digitalRead(gParamValue));
} else ErrorMessage(server);
}
}
void commandsHelp(WebServer &server) {
int idx;
for (idx = 0; gCommandTable[idx].name != NULL; idx++) {
server.print(gCommandTable[idx].name);
server.print("<br>");
}
}
/**********************************************************************************************************************/
void ErrorMessage(WebServer &server) {
server.print("ERROR: This Pin is not configured for I/O");
}
/**********************************************************************************************************************
* Разбор запроса
**/
void parsedRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
URLPARAM_RESULT rc;
char name[NAMELEN];
int name_len;
char value[VALUELEN];
int value_len;
server.httpSuccess(); // this line sends the standard "we're all OK" headers back to the browser
/* if we're handling a GET or POST, we can output our data here.
For a HEAD request, we just stop after outputting headers. */
if (type == WebServer::HEAD)
return;
if (strlen(url_tail))
{
while (strlen(url_tail)) // Разбор URI на составные части (выборка параметров)
{
rc = server.nextURLparam(&url_tail, name, NAMELEN, value, VALUELEN);
if (rc == URLPARAM_EOS) {
// server.printP(Params_end);
}
else // Получили параметр (name) и его значение (value)
{
// Выполняем команды
strcpy (gCommandBuffer, value); // параметры (значение)
strcpy (gParamBuffer, name); // команда
cliProcessCommand(server);
}
}
}
/*
if (type == WebServer::POST)
{
server.printP(Post_params_begin);
while (server.readPOSTparam(name, NAMELEN, value, VALUELEN))
{
server.print(name);
server.printP(Parsed_item_separator);
server.print(value);
server.printP(Tail_end);
}
}
*/
}
void get1wireDevices(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
//TODO получить все устройства на шине и выдать на страницу
int numberOfDevices = sensors.getDeviceCount();
sensors.begin();
for(int i=0;i<numberOfDevices; i++) {
if(sensors.getAddress(Termometers, i))
{
server.print("T");
server.print(i);
server.print(":");
for (uint8_t i = 0; i < 8; i++) {
if (Termometers < 16) server.print("0");
server.print(Termometers, HEX);
}
float tempC = sensors.getTempC(Termometers);
server.print(":");
server.print(tempC);
server.print(";");
} else {
// not found
server.print("NOT FOUND");
}
}
}
void stateRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
strcpy (gParamBuffer, "ALL");
commandsStatus(server);
}
/**********************************************************************************************************************
* Генерация и вывод информации об устройстве
**/
void infoRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
server.printP(Page_info);
server.print("IP:");
server.print(Ethernet.localIP());
server.print("<br>Location:");
server.printP(location_info);
server.print("<hr>Pin info:<br>");
server.printP(pin_info);
server.print("<hr>Pin current state: ");
strcpy (gParamBuffer, "ALL");
commandsStatus(server);
server.print("<hr><a href='/getdev'>1-wire devices</a>");
server.print("<hr>Commands:<br>");
commandsHelp(server);
server.print("<hr><br>Version info: ");
server.printP(version_info);
}
/**********************************************************************************************************************
* Поиск устройств (датчиков температуры на шине 1-wire)
**/
void searchDevices() {
Serial.println("Start search on 1-wire");
int numberOfDevices = sensors.getDeviceCount();
sensors.begin();
for(int i=0;i<numberOfDevices; i++) {
if(sensors.getAddress(Termometers, i))
{
Serial.print("Found device ");
Serial.print(i, DEC);
Serial.print(" with address: ");
for (uint8_t i = 0; i < 8; i++) {
if (Termometers < 16) Serial.print("0");
Serial.print(Termometers, HEX);
}
Serial.print("Resolution actually set to: ");
Serial.print(sensors.getResolution(Termometers), DEC);
Serial.println();
float tempC = sensors.getTempC(Termometers);
Serial.print(tempC);
Serial.println("C");
} else {
// not found
}
}
}
/**********************************************************************************************************************/
void setup() {
// Для дебага будем выводить отладочные сообщения в консоль
// TODO Убрать вывод в консоль "за дабаг" (т.е. вывод только если скимпилированно с поддержкой дебага)
Serial.begin(9600);
Serial.println("Start");
Ethernet.begin(mac, ip, dns_server, gateway, subnet); // Инициализируем Ethernet Shield
webserver.setDefaultCommand(&infoRequest); // дефолтная страница вывода (информация о контроллере)
webserver.addCommand("command", &parsedRequest); // команды
webserver.addCommand("state", &stateRequest); // выдать состояния всех устройств
webserver.addCommand("getdev", &get1wireDevices); // получить список устройств на 1-wire
webserver.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
// Настройка портов на вывод
for (int thisPort = startPort; thisPort <=endPort; thisPort++) {
pinMode(thisPort, OUTPUT);
digitalWrite(thisPort, EEPROM.read(thisPort));
//Serial.print("EEPROM"); //для отладки
//Serial.print(thisPort); //для отладки
//Serial.print(" = "); //для отладки
//Serial.println(EEPROM.read(thisPort)); //для отладки
}
// Настройки 1-wire
sensors.begin(); // Инициализация шины 1-wire (для датчиков температуры)
sensors.requestTemperatures(); // Перед каждым получением температуры надо ее запросить
searchDevices();
}
/**********************************************************************************************************************/
void loop() {
char buff[64];
int len = 64;
webserver.processConnection(buff, &len); // process incoming connections one at a time forever
sensors.requestTemperatures();
delay(1000);
for( int i = 0; i < MAX_PINS; i++) //цикл переберает значения MAX_PIN попорядку
{
val_array = EEPROM.read(i);
byte l_pin_state = digitalRead(pin_array); //считать данные и записать в l_pin_state
if( l_pin_state != val_array ) // сравнить l_pin_state и val_array
{
Serial.print("Pin");
Serial.print(pin_array);
Serial.print("=");
Serial.println(l_pin_state);
val_array = l_pin_state; // записать текущее значение в val_array
EEPROM.write(i, l_pin_state);
delay(20);
}
}
}
Уже сам запутался, столько всего перепробывал. Голова кругом идёт. Данный залил тоже трабла. Открываю датчики , а в ответ EPIC FAIL. Внизу скетч который у меня исправнё идёт. Может разок опишите как в МДМ освоит температуру, буду премного благодарен. Хочетса уже чего то в реале увидеть, а то головолломка. Спасибо заранее.
/**
* Контроллер-исполнительное устройство (к проекту http://smartliving.ru/)
* Platform: Arduino UNO R3 + EthernetShield W5100
* IDE: Arduino 1.0.1
*
* исполнительные устройства (реле) подключены к Digital 8 - 13
*
* /
* обращение по http://xx.xx.xx.xx/ выдаст справочную информацию по этому устройству (нужно для того, чтобы когда обращаешься
* по IP к устройству понять что это за контроллер и пр.)
*
* /state - состояние всез портов
* /command - выполнение команды
* команды можно вызывать серией в 1 запросе. Например http://xx.xx.xx.xx/command?3=CLICK&4=CLICK&5=ON&6=OFF
* только длинна строки запроса не должна привышать maxLength
* /getdev - получить список всех устройст на 1-wire
* формат вывода:
* T<номер устройства на шине>:<HEX адрес устройства>:<текущая температура в градусах цельсия>;[...]
* (пример T0:1060CF59010800E3:24.06;T1:109ABE59010800FE:24.56;)
*
*
**/
#include <Ethernet.h>
#include <SPI.h>
#include <Arduino.h>
#include "WebServer.h"// Webduino (https://github.com/sirleech/Webduino)
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE4, 0xDE, 0x35 }; // MAC-адрес нашего устройства
byte ip[] = { 192, 168, 1, 120 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 1, 1 };
byte dns_server[] = { 192, 168, 1, 1 };
// ip-адрес удалённого сервера
byte rserver[] = { 192, 168, 1, 130 };
// Настройки выходов
int startPort=4;
int endPort=9;
// Настойка аналоговых входов
int startAn=1;
int endAn=3;
// Настройка входов
//int startPin=1;
//int endPin=5;
int old_entry=0;
char buf[80];
#define MAX_PINS 4 //здесь указываем максимальное количество входоа 4
const byte pin_array[MAX_PINS] = { 3, 4, 5, 6 }; //номера используемых пинов
byte val_array[MAX_PINS] ={ 0, 0, 0, 0 }; //предыдущие значения для каждого порта
// Pin controller for connection data pin DS18S20
#define ONE_WIRE_BUS 2 // Digital 2 pin Arduino (куда подключен выход с шины датчиков DS18X20
#define TEMPERATURE_PRECISION 9
#define VERSION_STRING "0.1"
#define COMPILE_DATE_STRING "2012-09-18"
P(Page_info) = "<html><head><title>smartliving.ru controller " VERSION_STRING "</title></head><body>\n";
P(location_info) = "underground server room";
P(pin_info) = "D2 - 1-wire (many DS18S20)<br>D3-light undergroung";
P(version_info) = VERSION_STRING ". Compile date: " COMPILE_DATE_STRING;
String url = String(60);
int maxLength=50; // Максимальная длинна строки запроса
#define delayClick 1000 // задержка при обычном CLICK
#define delayLClick 3000 // задержка при длинном LCLICK
#define MAX_COMMAND_LEN (10)
#define MAX_PARAMETER_LEN (10)
#define COMMAND_TABLE_SIZE (9)
#define PREFIX ""
WebServer webserver(PREFIX, 80);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Для поиска
DeviceAddress Termometers;
float tempC;
#define NAMELEN 32
#define VALUELEN 32
char gCommandBuffer[MAX_COMMAND_LEN + 1];
char gParamBuffer[MAX_PARAMETER_LEN + 1];
long gParamValue;
typedef struct {
char const *name;
void (*function)(WebServer &server);
} command_t;
command_t const gCommandTable[COMMAND_TABLE_SIZE] = {
// {"LED", commandsLed, },
{"HELP", commandsHelp, }, // Выводит список комманд (вызов http://xx.xx.xx.xx/command?8=HELP )
{"ON", commandsOn, }, // Устанавливает "1" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=ON )
{"OFF", commandsOff, }, // Устанавливает "0" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=OFF )
{"STATUS", commandsStatus, }, // Получить состояние цифрового порта (1 или 0) (вызов http://xx.xx.xx.xx/command?8=STATUS ),
// если вместо номера порта передать ALL (вызов http://xx.xx.xx.xx/command?ALL=STATUS ), то получим состояние всех портов (Пример вывода P3=0;P4=0;P5=0;P6=0;P7=0;P8=1;P9=1;)
{"CLICK", commandsClick, }, // Кратковременная "1" на порту 1сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=CLICK )
{"LCLICK", commandsLClick, }, // Кратковременная "1" на порту 3сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=LCLICK )
{"AN", commandsAn, },
{NULL, NULL }
};
/**********************************************************************************************************************
*
* Function: cliProcessCommand
*
* Description: Look up the command in the command table. If the
* command is found, call the command's function. If the
* command is not found, output an error message.
*
* Notes:
*
* Returns: None.
*
**********************************************************************/
void cliProcessCommand(WebServer &server)
{
int bCommandFound = false;
int idx;
gParamValue = strtol(gParamBuffer, NULL, 0); // Convert the parameter to an integer value. If the parameter is empty, gParamValue becomes 0.
for (idx = 0; gCommandTable[idx].name != NULL; idx++) { // Search for the command in the command table until it is found or the end of the table is reached. If the command is found, break out of the loop.
if (strcmp(gCommandTable[idx].name, gCommandBuffer) == 0) {
bCommandFound = true;
break;
}
}
if (bCommandFound == true) { // Если команда найдена (в массиве команд), то выполняем ее. Если нет - игнорируем
(*gCommandTable[idx].function)(server);
}
else { // Command not found
server.print("ERROR: Command not found");
}
}
/**********************************************************************************************************************/
/* Обработчики команд */
void commandsAn(WebServer &server) {
int anValue;
if (gParamValue>=startAn && gParamValue<=endAn)
anValue = analogRead(gParamValue);
Serial.print("Analog");
Serial.print(gParamValue);
Serial.print("=");
Serial.println(anValue);
}
void commandsOn(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,HIGH);
EEPROM.write(gParamValue,HIGH);
//Serial.print("Port "); //для отладки
//Serial.print(gParamValue); //для отладки
//Serial.println(" = ON"); //для отладки
} else ErrorMessage(server);
}
void commandsOff(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,LOW);
EEPROM.write(gParamValue,LOW);
//Serial.print("Port "); //для отладки
//Serial.print(gParamValue); //для отладки
//Serial.println(" = OFF"); //для отладки
} else ErrorMessage(server);
}
void commandsClick(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,HIGH);
delay(delayClick);
digitalWrite(gParamValue,LOW);
} else ErrorMessage(server);
}
void commandsLClick(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,HIGH);
delay(delayLClick);
digitalWrite(gParamValue,LOW);
} else ErrorMessage(server);
}
void commandsStatus(WebServer &server) {
if (strcmp(gParamBuffer, "ALL") == 0) { // выдать состояние всех пинов
for(int i=startPort;i<=endPort;i++) {
int st=digitalRead(i);
char my_st[5];
itoa(st,my_st,10);
server.print("P");
server.print(i);
server.print("=");
server.print(my_st);
server.print(";");
}
} else { // выдать состояние только 1 пина
if (gParamValue>=startPort && gParamValue<=endPort) {
server.print("P");
server.print(gParamValue);
server.print("=");
server.print(digitalRead(gParamValue));
} else ErrorMessage(server);
}
}
void commandsHelp(WebServer &server) {
int idx;
for (idx = 0; gCommandTable[idx].name != NULL; idx++) {
server.print(gCommandTable[idx].name);
server.print("<br>");
}
}
/**********************************************************************************************************************/
void ErrorMessage(WebServer &server) {
server.print("ERROR: This Pin is not configured for I/O");
}
/**********************************************************************************************************************
* Разбор запроса
**/
void parsedRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
URLPARAM_RESULT rc;
char name[NAMELEN];
int name_len;
char value[VALUELEN];
int value_len;
server.httpSuccess(); // this line sends the standard "we're all OK" headers back to the browser
/* if we're handling a GET or POST, we can output our data here.
For a HEAD request, we just stop after outputting headers. */
if (type == WebServer::HEAD)
return;
if (strlen(url_tail))
{
while (strlen(url_tail)) // Разбор URI на составные части (выборка параметров)
{
rc = server.nextURLparam(&url_tail, name, NAMELEN, value, VALUELEN);
if (rc == URLPARAM_EOS) {
// server.printP(Params_end);
}
else // Получили параметр (name) и его значение (value)
{
// Выполняем команды
strcpy (gCommandBuffer, value); // параметры (значение)
strcpy (gParamBuffer, name); // команда
cliProcessCommand(server);
}
}
}
/*
if (type == WebServer::POST)
{
server.printP(Post_params_begin);
while (server.readPOSTparam(name, NAMELEN, value, VALUELEN))
{
server.print(name);
server.printP(Parsed_item_separator);
server.print(value);
server.printP(Tail_end);
}
}
*/
}
void get1wireDevices(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
//TODO получить все устройства на шине и выдать на страницу
int numberOfDevices = sensors.getDeviceCount();
sensors.begin();
for(int i=0;i<numberOfDevices; i++) {
if(sensors.getAddress(Termometers, i))
{
server.print("T");
server.print(i);
server.print(":");
for (uint8_t i = 0; i < 8; i++) {
if (Termometers < 16) server.print("0");
server.print(Termometers, HEX);
}
float tempC = sensors.getTempC(Termometers);
server.print(":");
server.print(tempC);
server.print(";");
} else {
// not found
server.print("NOT FOUND");
}
}
}
void stateRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
strcpy (gParamBuffer, "ALL");
commandsStatus(server);
}
/**********************************************************************************************************************
* Генерация и вывод информации об устройстве
**/
void infoRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
server.printP(Page_info);
server.print("IP:");
server.print(Ethernet.localIP());
server.print("<br>Location:");
server.printP(location_info);
server.print("<hr>Pin info:<br>");
server.printP(pin_info);
server.print("<hr>Pin current state: ");
strcpy (gParamBuffer, "ALL");
commandsStatus(server);
server.print("<hr><a href='/getdev'>1-wire devices</a>");
server.print("<hr>Commands:<br>");
commandsHelp(server);
server.print("<hr><br>Version info: ");
server.printP(version_info);
}
/**********************************************************************************************************************
* Поиск устройств (датчиков температуры на шине 1-wire)
**/
void searchDevices() {
Serial.println("Start search on 1-wire");
int numberOfDevices = sensors.getDeviceCount();
sensors.begin();
for(int i=0;i<numberOfDevices; i++) {
if(sensors.getAddress(Termometers, i))
{
Serial.print("Found device ");
Serial.print(i, DEC);
Serial.print(" with address: ");
for (uint8_t i = 0; i < 8; i++) {
if (Termometers < 16) Serial.print("0");
Serial.print(Termometers, HEX);
}
Serial.print("Resolution actually set to: ");
Serial.print(sensors.getResolution(Termometers), DEC);
Serial.println();
float tempC = sensors.getTempC(Termometers);
Serial.print(tempC);
Serial.println("C");
} else {
// not found
}
}
}
/**********************************************************************************************************************/
void setup() {
// Для дебага будем выводить отладочные сообщения в консоль
// TODO Убрать вывод в консоль "за дабаг" (т.е. вывод только если скимпилированно с поддержкой дебага)
Serial.begin(9600);
Serial.println("Start");
Ethernet.begin(mac, ip, dns_server, gateway, subnet); // Инициализируем Ethernet Shield
webserver.setDefaultCommand(&infoRequest); // дефолтная страница вывода (информация о контроллере)
webserver.addCommand("command", &parsedRequest); // команды
webserver.addCommand("state", &stateRequest); // выдать состояния всех устройств
webserver.addCommand("getdev", &get1wireDevices); // получить список устройств на 1-wire
webserver.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
// Настройка портов на вывод
for (int thisPort = startPort; thisPort <=endPort; thisPort++) {
pinMode(thisPort, OUTPUT);
digitalWrite(thisPort, EEPROM.read(thisPort));
//Serial.print("EEPROM"); //для отладки
//Serial.print(thisPort); //для отладки
//Serial.print(" = "); //для отладки
//Serial.println(EEPROM.read(thisPort)); //для отладки
}
// Настройки 1-wire
sensors.begin(); // Инициализация шины 1-wire (для датчиков температуры)
sensors.requestTemperatures(); // Перед каждым получением температуры надо ее запросить
searchDevices();
}
/**********************************************************************************************************************/
void loop() {
char buff[64];
int len = 64;
webserver.processConnection(buff, &len); // process incoming connections one at a time forever
sensors.requestTemperatures();
delay(1000);
for( int i = 0; i < MAX_PINS; i++) //цикл переберает значения MAX_PIN попорядку
{
val_array = EEPROM.read(i);
byte l_pin_state = digitalRead(pin_array); //считать данные и записать в l_pin_state
if( l_pin_state != val_array ) // сравнить l_pin_state и val_array
{
Serial.print("Pin");
Serial.print(pin_array);
Serial.print("=");
Serial.println(l_pin_state);
val_array = l_pin_state; // записать текущее значение в val_array
EEPROM.write(i, l_pin_state);
delay(20);
}
}
}
- viris
- Сообщения: 89
- Зарегистрирован: Вс янв 20, 2013 5:24 pm
- Откуда: РФ Горловка ДНР
- Благодарил (а): 1 раз
- Поблагодарили: 2 раза
- Контактная информация:
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Через вебпеременные.janlam писал(а):Благадарствую,
Уже сам запутался, столько всего перепробывал. Голова кругом идёт. Данный залил тоже трабла. Открываю датчики , а в ответ EPIC FAIL. Внизу скетч который у меня исправнё идёт. Может разок опишите как в МДМ освоит температуру, буду премного благодарен. Хочетса уже чего то в реале увидеть, а то головолломка. Спасибо заранее.СпойлерПоказать/**
* Контроллер-исполнительное устройство (к проекту http://smartliving.ru/)
* Platform: Arduino UNO R3 + EthernetShield W5100
* IDE: Arduino 1.0.1
*
* исполнительные устройства (реле) подключены к Digital 8 - 13
*
* /
* обращение по http://xx.xx.xx.xx/ выдаст справочную информацию по этому устройству (нужно для того, чтобы когда обращаешься
* по IP к устройству понять что это за контроллер и пр.)
*
* /state - состояние всез портов
* /command - выполнение команды
* команды можно вызывать серией в 1 запросе. Например http://xx.xx.xx.xx/command?3=CLICK&4=CLICK&5=ON&6=OFF
* только длинна строки запроса не должна привышать maxLength
* /getdev - получить список всех устройст на 1-wire
* формат вывода:
* T<номер устройства на шине>:<HEX адрес устройства>:<текущая температура в градусах цельсия>;[...]
* (пример T0:1060CF59010800E3:24.06;T1:109ABE59010800FE:24.56;)
*
*
**/
#include <Ethernet.h>
#include <SPI.h>
#include <Arduino.h>
#include "WebServer.h"// Webduino (https://github.com/sirleech/Webduino)
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE4, 0xDE, 0x35 }; // MAC-адрес нашего устройства
byte ip[] = { 192, 168, 1, 120 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = { 192, 168, 1, 1 };
byte dns_server[] = { 192, 168, 1, 1 };
// ip-адрес удалённого сервера
byte rserver[] = { 192, 168, 1, 130 };
// Настройки выходов
int startPort=4;
int endPort=9;
// Настойка аналоговых входов
int startAn=1;
int endAn=3;
// Настройка входов
//int startPin=1;
//int endPin=5;
int old_entry=0;
char buf[80];
#define MAX_PINS 4 //здесь указываем максимальное количество входоа 4
const byte pin_array[MAX_PINS] = { 3, 4, 5, 6 }; //номера используемых пинов
byte val_array[MAX_PINS] ={ 0, 0, 0, 0 }; //предыдущие значения для каждого порта
// Pin controller for connection data pin DS18S20
#define ONE_WIRE_BUS 2 // Digital 2 pin Arduino (куда подключен выход с шины датчиков DS18X20
#define TEMPERATURE_PRECISION 9
#define VERSION_STRING "0.1"
#define COMPILE_DATE_STRING "2012-09-18"
P(Page_info) = "<html><head><title>smartliving.ru controller " VERSION_STRING "</title></head><body>\n";
P(location_info) = "underground server room";
P(pin_info) = "D2 - 1-wire (many DS18S20)<br>D3-light undergroung";
P(version_info) = VERSION_STRING ". Compile date: " COMPILE_DATE_STRING;
String url = String(60);
int maxLength=50; // Максимальная длинна строки запроса
#define delayClick 1000 // задержка при обычном CLICK
#define delayLClick 3000 // задержка при длинном LCLICK
#define MAX_COMMAND_LEN (10)
#define MAX_PARAMETER_LEN (10)
#define COMMAND_TABLE_SIZE (9)
#define PREFIX ""
WebServer webserver(PREFIX, 80);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Для поиска
DeviceAddress Termometers;
float tempC;
#define NAMELEN 32
#define VALUELEN 32
char gCommandBuffer[MAX_COMMAND_LEN + 1];
char gParamBuffer[MAX_PARAMETER_LEN + 1];
long gParamValue;
typedef struct {
char const *name;
void (*function)(WebServer &server);
} command_t;
command_t const gCommandTable[COMMAND_TABLE_SIZE] = {
// {"LED", commandsLed, },
{"HELP", commandsHelp, }, // Выводит список комманд (вызов http://xx.xx.xx.xx/command?8=HELP )
{"ON", commandsOn, }, // Устанавливает "1" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=ON )
{"OFF", commandsOff, }, // Устанавливает "0" на заданном цифровом порту (вызов http://xx.xx.xx.xx/command?8=OFF )
{"STATUS", commandsStatus, }, // Получить состояние цифрового порта (1 или 0) (вызов http://xx.xx.xx.xx/command?8=STATUS ),
// если вместо номера порта передать ALL (вызов http://xx.xx.xx.xx/command?ALL=STATUS ), то получим состояние всех портов (Пример вывода P3=0;P4=0;P5=0;P6=0;P7=0;P8=1;P9=1;)
{"CLICK", commandsClick, }, // Кратковременная "1" на порту 1сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=CLICK )
{"LCLICK", commandsLClick, }, // Кратковременная "1" на порту 3сек (время настраивается) (вызов http://xx.xx.xx.xx/command?8=LCLICK )
{"AN", commandsAn, },
{NULL, NULL }
};
/**********************************************************************************************************************
*
* Function: cliProcessCommand
*
* Description: Look up the command in the command table. If the
* command is found, call the command's function. If the
* command is not found, output an error message.
*
* Notes:
*
* Returns: None.
*
**********************************************************************/
void cliProcessCommand(WebServer &server)
{
int bCommandFound = false;
int idx;
gParamValue = strtol(gParamBuffer, NULL, 0); // Convert the parameter to an integer value. If the parameter is empty, gParamValue becomes 0.
for (idx = 0; gCommandTable[idx].name != NULL; idx++) { // Search for the command in the command table until it is found or the end of the table is reached. If the command is found, break out of the loop.
if (strcmp(gCommandTable[idx].name, gCommandBuffer) == 0) {
bCommandFound = true;
break;
}
}
if (bCommandFound == true) { // Если команда найдена (в массиве команд), то выполняем ее. Если нет - игнорируем
(*gCommandTable[idx].function)(server);
}
else { // Command not found
server.print("ERROR: Command not found");
}
}
/**********************************************************************************************************************/
/* Обработчики команд */
void commandsAn(WebServer &server) {
int anValue;
if (gParamValue>=startAn && gParamValue<=endAn)
anValue = analogRead(gParamValue);
Serial.print("Analog");
Serial.print(gParamValue);
Serial.print("=");
Serial.println(anValue);
}
void commandsOn(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,HIGH);
EEPROM.write(gParamValue,HIGH);
//Serial.print("Port "); //для отладки
//Serial.print(gParamValue); //для отладки
//Serial.println(" = ON"); //для отладки
} else ErrorMessage(server);
}
void commandsOff(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,LOW);
EEPROM.write(gParamValue,LOW);
//Serial.print("Port "); //для отладки
//Serial.print(gParamValue); //для отладки
//Serial.println(" = OFF"); //для отладки
} else ErrorMessage(server);
}
void commandsClick(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,HIGH);
delay(delayClick);
digitalWrite(gParamValue,LOW);
} else ErrorMessage(server);
}
void commandsLClick(WebServer &server) {
if (gParamValue>=startPort && gParamValue<=endPort) {
digitalWrite(gParamValue,HIGH);
delay(delayLClick);
digitalWrite(gParamValue,LOW);
} else ErrorMessage(server);
}
void commandsStatus(WebServer &server) {
if (strcmp(gParamBuffer, "ALL") == 0) { // выдать состояние всех пинов
for(int i=startPort;i<=endPort;i++) {
int st=digitalRead(i);
char my_st[5];
itoa(st,my_st,10);
server.print("P");
server.print(i);
server.print("=");
server.print(my_st);
server.print(";");
}
} else { // выдать состояние только 1 пина
if (gParamValue>=startPort && gParamValue<=endPort) {
server.print("P");
server.print(gParamValue);
server.print("=");
server.print(digitalRead(gParamValue));
} else ErrorMessage(server);
}
}
void commandsHelp(WebServer &server) {
int idx;
for (idx = 0; gCommandTable[idx].name != NULL; idx++) {
server.print(gCommandTable[idx].name);
server.print("<br>");
}
}
/**********************************************************************************************************************/
void ErrorMessage(WebServer &server) {
server.print("ERROR: This Pin is not configured for I/O");
}
/**********************************************************************************************************************
* Разбор запроса
**/
void parsedRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
URLPARAM_RESULT rc;
char name[NAMELEN];
int name_len;
char value[VALUELEN];
int value_len;
server.httpSuccess(); // this line sends the standard "we're all OK" headers back to the browser
/* if we're handling a GET or POST, we can output our data here.
For a HEAD request, we just stop after outputting headers. */
if (type == WebServer::HEAD)
return;
if (strlen(url_tail))
{
while (strlen(url_tail)) // Разбор URI на составные части (выборка параметров)
{
rc = server.nextURLparam(&url_tail, name, NAMELEN, value, VALUELEN);
if (rc == URLPARAM_EOS) {
// server.printP(Params_end);
}
else // Получили параметр (name) и его значение (value)
{
// Выполняем команды
strcpy (gCommandBuffer, value); // параметры (значение)
strcpy (gParamBuffer, name); // команда
cliProcessCommand(server);
}
}
}
/*
if (type == WebServer::POST)
{
server.printP(Post_params_begin);
while (server.readPOSTparam(name, NAMELEN, value, VALUELEN))
{
server.print(name);
server.printP(Parsed_item_separator);
server.print(value);
server.printP(Tail_end);
}
}
*/
}
void get1wireDevices(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
//TODO получить все устройства на шине и выдать на страницу
int numberOfDevices = sensors.getDeviceCount();
sensors.begin();
for(int i=0;i<numberOfDevices; i++) {
if(sensors.getAddress(Termometers, i))
{
server.print("T");
server.print(i);
server.print(":");
for (uint8_t i = 0; i < 8; i++) {
if (Termometers < 16) server.print("0");
server.print(Termometers, HEX);
}
float tempC = sensors.getTempC(Termometers);
server.print(":");
server.print(tempC);
server.print(";");
} else {
// not found
server.print("NOT FOUND");
}
}
}
void stateRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
strcpy (gParamBuffer, "ALL");
commandsStatus(server);
}
/**********************************************************************************************************************
* Генерация и вывод информации об устройстве
**/
void infoRequest(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
{
server.printP(Page_info);
server.print("IP:");
server.print(Ethernet.localIP());
server.print("<br>Location:");
server.printP(location_info);
server.print("<hr>Pin info:<br>");
server.printP(pin_info);
server.print("<hr>Pin current state: ");
strcpy (gParamBuffer, "ALL");
commandsStatus(server);
server.print("<hr><a href='/getdev'>1-wire devices</a>");
server.print("<hr>Commands:<br>");
commandsHelp(server);
server.print("<hr><br>Version info: ");
server.printP(version_info);
}
/**********************************************************************************************************************
* Поиск устройств (датчиков температуры на шине 1-wire)
**/
void searchDevices() {
Serial.println("Start search on 1-wire");
int numberOfDevices = sensors.getDeviceCount();
sensors.begin();
for(int i=0;i<numberOfDevices; i++) {
if(sensors.getAddress(Termometers, i))
{
Serial.print("Found device ");
Serial.print(i, DEC);
Serial.print(" with address: ");
for (uint8_t i = 0; i < 8; i++) {
if (Termometers < 16) Serial.print("0");
Serial.print(Termometers, HEX);
}
Serial.print("Resolution actually set to: ");
Serial.print(sensors.getResolution(Termometers), DEC);
Serial.println();
float tempC = sensors.getTempC(Termometers);
Serial.print(tempC);
Serial.println("C");
} else {
// not found
}
}
}
/**********************************************************************************************************************/
void setup() {
// Для дебага будем выводить отладочные сообщения в консоль
// TODO Убрать вывод в консоль "за дабаг" (т.е. вывод только если скимпилированно с поддержкой дебага)
Serial.begin(9600);
Serial.println("Start");
Ethernet.begin(mac, ip, dns_server, gateway, subnet); // Инициализируем Ethernet Shield
webserver.setDefaultCommand(&infoRequest); // дефолтная страница вывода (информация о контроллере)
webserver.addCommand("command", &parsedRequest); // команды
webserver.addCommand("state", &stateRequest); // выдать состояния всех устройств
webserver.addCommand("getdev", &get1wireDevices); // получить список устройств на 1-wire
webserver.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
// Настройка портов на вывод
for (int thisPort = startPort; thisPort <=endPort; thisPort++) {
pinMode(thisPort, OUTPUT);
digitalWrite(thisPort, EEPROM.read(thisPort));
//Serial.print("EEPROM"); //для отладки
//Serial.print(thisPort); //для отладки
//Serial.print(" = "); //для отладки
//Serial.println(EEPROM.read(thisPort)); //для отладки
}
// Настройки 1-wire
sensors.begin(); // Инициализация шины 1-wire (для датчиков температуры)
sensors.requestTemperatures(); // Перед каждым получением температуры надо ее запросить
searchDevices();
}
/**********************************************************************************************************************/
void loop() {
char buff[64];
int len = 64;
webserver.processConnection(buff, &len); // process incoming connections one at a time forever
sensors.requestTemperatures();
delay(1000);
for( int i = 0; i < MAX_PINS; i++) //цикл переберает значения MAX_PIN попорядку
{
val_array = EEPROM.read(i);
byte l_pin_state = digitalRead(pin_array); //считать данные и записать в l_pin_state
if( l_pin_state != val_array ) // сравнить l_pin_state и val_array
{
Serial.print("Pin");
Serial.print(pin_array);
Serial.print("=");
Serial.println(l_pin_state);
val_array = l_pin_state; // записать текущее значение в val_array
EEPROM.write(i, l_pin_state);
delay(20);
}
}
}
http://viris42.hldns.ru http://narodmon.ru/3052
Linux Debian7 Arduino UNO-R3, BMP085, DS18B20
http://connect.smartliving.ru/profile/50
Linux Debian7 Arduino UNO-R3, BMP085, DS18B20
http://connect.smartliving.ru/profile/50
-
- Сообщения: 16
- Зарегистрирован: Вт авг 26, 2014 6:29 am
- Благодарил (а): 8 раз
- Поблагодарили: 0
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Подскажите где копать дальше....закинул я скетч. На прямую по адресу http://192.168.1.120/ все вижу и t и реле управляю а как быть дальше не соображу. В MDM пытаюсь создать вебпеременную но безуспешно, вернее мое реле начинает постоянно работать(((Проще говоря есть ли тут пошаговая настройка чтоб создать простую кнопку? Спасибо!!!
-
- Сообщения: 354
- Зарегистрирован: Вт окт 09, 2012 8:05 am
- Откуда: Луза Кировская обл. Россия
- Благодарил (а): 20 раз
- Поблагодарили: 35 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Нужна помощь, конечно вопрос может и глупый, но как сформировать MAC адрес для Ethernet Shield. Просто, вроде выявил проблему, когда в сети 2 меги и с одним маком, происходят зависания обоих. Никогда бы не додумался. но мас надо сделать разный. Отключаю одно и все работает.
Linux версия. Ubuntu Server 16.04+2xArduinoMega+Eth_GW_Mysensors_10node+WeatherStation+Xiaomi
CONNECT
CONNECT
-
- Сообщения: 309
- Зарегистрирован: Вт сен 17, 2013 10:11 pm
- Благодарил (а): 3 раза
- Поблагодарили: 56 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Два одиноковых MAC-адреса естественно в сети быть не должно.Anton_kulibin писал(а):Нужна помощь, конечно вопрос может и глупый, но как сформировать MAC адрес для Ethernet Shield. Просто, вроде выявил проблему, когда в сети 2 меги и с одним маком, происходят зависания обоих. Никогда бы не додумался. но мас надо сделать разный. Отключаю одно и все работает.
Для каждой меги надо установить свой, прописывается в скетче. Хоть на 1 цифру/букву но разница должна быть...
-
- Сообщения: 136
- Зарегистрирован: Вт ноя 12, 2013 8:29 pm
- Благодарил (а): 2 раза
- Поблагодарили: 8 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Добрый день .
загрузил Mega2560R3_1307_
выдало ошибки
In file included from Mega2560R3_1307_.ino:23:
C:\Users\kostya\Documents\Arduino\libraries\Webduino/WebServer.h: In member function 'int WebServer::read()':
C:\Users\kostya\Documents\Arduino\libraries\Webduino/WebServer.h:729: error: ambiguous overload for 'operator==' in '((WebServer*)this)->WebServer::m_client == 0'
C:\Users\kostya\Documents\Arduino\libraries\Webduino/WebServer.h:729: note: candidates are: operator==(int, int) <built-in>
C:\Users\kostya\Documents\Arduino\libraries\Ethernet/EthernetClient.h:27: note: virtual bool EthernetClient::operator==(const EthernetClient&)
Библиотеки все есть .
Подскажите в чем проблема
Platform: Arduino mega2560 + EthernetShield W5100
* IDE: Arduino 1.5.2
загрузил Mega2560R3_1307_
выдало ошибки
In file included from Mega2560R3_1307_.ino:23:
C:\Users\kostya\Documents\Arduino\libraries\Webduino/WebServer.h: In member function 'int WebServer::read()':
C:\Users\kostya\Documents\Arduino\libraries\Webduino/WebServer.h:729: error: ambiguous overload for 'operator==' in '((WebServer*)this)->WebServer::m_client == 0'
C:\Users\kostya\Documents\Arduino\libraries\Webduino/WebServer.h:729: note: candidates are: operator==(int, int) <built-in>
C:\Users\kostya\Documents\Arduino\libraries\Ethernet/EthernetClient.h:27: note: virtual bool EthernetClient::operator==(const EthernetClient&)
Библиотеки все есть .
Подскажите в чем проблема
Platform: Arduino mega2560 + EthernetShield W5100
* IDE: Arduino 1.5.2