Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Модератор: immortal
-
- Сообщения: 117
- Зарегистрирован: Сб апр 26, 2014 5:06 pm
- Откуда: Новосибирск
- Благодарил (а): 21 раз
- Поблагодарили: 11 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Тогда смотрим скетч монитор в любом случае должен показывать скорост опроса порта какая
- Ubuntu Server .Esp8266)
-
- Сообщения: 117
- Зарегистрирован: Сб апр 26, 2014 5:06 pm
- Откуда: Новосибирск
- Благодарил (а): 21 раз
- Поблагодарили: 11 раз
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Попробуй меньше поставить
- Ubuntu Server .Esp8266)
-
- Сообщения: 24
- Зарегистрирован: Вт сен 30, 2014 3:36 am
- Благодарил (а): 1 раз
- Поблагодарили: 0
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
#include <Ethernet.h>
#include <SPI.h>
// Библиотеки ниже нет в стандартной поставке среды разработки Arduino.
// придётся её скопировать.
#include <DallasTemperature.h>
// MAC-адрес нашего устройства
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE4, 0xDE, 0x35 };
// ip-адрес устройства
byte ip[] = { 192, 168, 1, 150 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = {192, 168, 1, 1 };
byte dns_server[] = { 192, 168, 1, 1 };
// ip-адрес удалённого сервера
byte server[] = { 192, 168, 1, 104 }; // измените на свой
int old_temperature1=0;
int old_temperature2=0;
int old_garage=0;
int old_entry=0;
int old_movement_1=0;
int old_movement_2=0;
int old_light=0;
char buf[80];
Client rclient(server, 80); // 80-порт.
DallasTemperature tempSensor1;
DallasTemperature tempSensor2;
// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf);
if (rclient.connect()) {
Serial.println("OK");
rclient.println(buf);
rclient.println("Host: 192.168.1.104");
rclient.println();
delay(2000);
rclient.stop();
} else {
Serial.println("FAILED");
}
}
void setup()
{
Ethernet.begin(mac, ip); // Инициализируем Ethernet Shield
tempSensor1.begin(2); // Датчик температуры на 2-й пин (котёл)
tempSensor2.begin(3); // Датчик температуры на 3-й пин (зал)
pinMode(4, INPUT); // Датчик гаражной двери на 7-ый пин
old_garage=digitalRead(4);
pinMode(5, INPUT); // Датчик въездных ворот на 8-ый пин
old_entry=digitalRead(5);
pinMode(6, INPUT); // Датчик движения 1
old_movement_1=digitalRead(6);
pinMode(7, INPUT); // Датчик движения 2
old_movement_2=digitalRead(7);
pinMode(8, INPUT); // Датчик света
old_light=digitalRead(8);
Serial.begin(115200); // Скорость консольного порта 115200 (пригодится для отладки)
}
void loop()
{
int valid_sensor=0;
delay(1000); // задержка в 1 сек.
// TEMP SENSOR 1
float current_temp1=0;
// Соединяемся
// Обработчик ошибок датчика
valid_sensor=1;
switch(tempSensor1.isValid())
{
case 1:
Serial.println("Err T1"); // ошибка контрольной суммы
tempSensor1.reset(); // сбросить девайс
valid_sensor=0;
case 2:
Serial.println("Err T1"); // какой-то "левый" датчик
tempSensor1.reset(); // сбросить девайс
valid_sensor=0;
}
if (valid_sensor==1) {
Serial.println("T1");
current_temp1=tempSensor1.getTemperature(); // получаем температуру
Serial.println(current_temp1);
if ((old_temperature1!=(int)current_temp1) && (current_temp1<79) && (current_temp1>5)) {
int temp1 = (current_temp1 - (int)current_temp1) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=sensorKotel&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp1, abs(temp1));
sendHTTPRequest();
}
old_temperature1=(int)current_temp1;
}
// TEMP SENSOR 2
float current_temp2=0;
// Соединяемся
// Обработчик ошибок датчика
valid_sensor=1;
switch(tempSensor2.isValid())
{
case 1:
Serial.println("Err T2"); // ошибка контрольной суммы
tempSensor2.reset(); // сбросить девайс
valid_sensor=0;
case 2:
Serial.println("Err T2"); // какой-то "левый" датчик
tempSensor2.reset(); // сбросить девайс
valid_sensor=0;
}
if (valid_sensor==1) {
Serial.println("T2");
current_temp2=tempSensor2.getTemperature(); // получаем температуру
Serial.println(current_temp2);
if ((old_temperature2!=(int)current_temp2) && (current_temp2<50) && (current_temp2>5)) {
int temp1 = (current_temp2 - (int)current_temp2) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=sensorZal&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp2, abs(temp1));
sendHTTPRequest();
}
old_temperature2=(int)current_temp2;
}
//GARAGE GATES SENSOR
Serial.println("G");
int current_garage=digitalRead(4);
//Serial.println(current_garage);
if (current_garage!=(int)old_garage) {
old_garage=(int)current_garage;
sprintf(buf, "GET /objects/?object=sensorGarage&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_garage);
sendHTTPRequest();
}
//ENTRY GATES SENSOR
Serial.println("E");
int current_entry=digitalRead(5);
//Serial.println(current_entry);
if (current_entry!=(int)old_entry) {
old_entry=(int)current_entry;
sprintf(buf, "GET /objects/?object=sensorEntry&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_entry);
sendHTTPRequest();
}
//MOVEMENT 1 SENSOR
Serial.println("M1");
int current_movement_1=digitalRead(6);
//Serial.println(current_movement_1);
if (current_movement_1!=(int)old_movement_1) {
old_movement_1=(int)current_movement_1;
sprintf(buf, "GET /objects/?object=sensorMovement1&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_movement_1);
sendHTTPRequest();
}
//MOVEMENT 2 SENSOR
Serial.println("M2");
int current_movement_2=digitalRead(7);
//Serial.println(current_movement_2);
if (current_movement_2!=(int)old_movement_2) {
old_movement_2=(int)current_movement_2;
sprintf(buf, "GET /objects/?object=sensorMovement2&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_movement_2);
sendHTTPRequest();
}
//LIGHT SENSOR
Serial.println("L");
int current_light=digitalRead(8);
//Serial.println(current_light);
if (current_light!=(int)old_light) {
old_light=(int)current_light;
sprintf(buf, "GET /objects/?object=sensorLight&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_light);
sendHTTPRequest();
}
}
#include <SPI.h>
// Библиотеки ниже нет в стандартной поставке среды разработки Arduino.
// придётся её скопировать.
#include <DallasTemperature.h>
// MAC-адрес нашего устройства
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xE4, 0xDE, 0x35 };
// ip-адрес устройства
byte ip[] = { 192, 168, 1, 150 };
byte subnet[] = { 255, 255, 255, 0 };
byte gateway[] = {192, 168, 1, 1 };
byte dns_server[] = { 192, 168, 1, 1 };
// ip-адрес удалённого сервера
byte server[] = { 192, 168, 1, 104 }; // измените на свой
int old_temperature1=0;
int old_temperature2=0;
int old_garage=0;
int old_entry=0;
int old_movement_1=0;
int old_movement_2=0;
int old_light=0;
char buf[80];
Client rclient(server, 80); // 80-порт.
DallasTemperature tempSensor1;
DallasTemperature tempSensor2;
// Функция отправки HTTP-запроса на сервер
void sendHTTPRequest() {
Serial.println(buf);
if (rclient.connect()) {
Serial.println("OK");
rclient.println(buf);
rclient.println("Host: 192.168.1.104");
rclient.println();
delay(2000);
rclient.stop();
} else {
Serial.println("FAILED");
}
}
void setup()
{
Ethernet.begin(mac, ip); // Инициализируем Ethernet Shield
tempSensor1.begin(2); // Датчик температуры на 2-й пин (котёл)
tempSensor2.begin(3); // Датчик температуры на 3-й пин (зал)
pinMode(4, INPUT); // Датчик гаражной двери на 7-ый пин
old_garage=digitalRead(4);
pinMode(5, INPUT); // Датчик въездных ворот на 8-ый пин
old_entry=digitalRead(5);
pinMode(6, INPUT); // Датчик движения 1
old_movement_1=digitalRead(6);
pinMode(7, INPUT); // Датчик движения 2
old_movement_2=digitalRead(7);
pinMode(8, INPUT); // Датчик света
old_light=digitalRead(8);
Serial.begin(115200); // Скорость консольного порта 115200 (пригодится для отладки)
}
void loop()
{
int valid_sensor=0;
delay(1000); // задержка в 1 сек.
// TEMP SENSOR 1
float current_temp1=0;
// Соединяемся
// Обработчик ошибок датчика
valid_sensor=1;
switch(tempSensor1.isValid())
{
case 1:
Serial.println("Err T1"); // ошибка контрольной суммы
tempSensor1.reset(); // сбросить девайс
valid_sensor=0;
case 2:
Serial.println("Err T1"); // какой-то "левый" датчик

tempSensor1.reset(); // сбросить девайс
valid_sensor=0;
}
if (valid_sensor==1) {
Serial.println("T1");
current_temp1=tempSensor1.getTemperature(); // получаем температуру
Serial.println(current_temp1);
if ((old_temperature1!=(int)current_temp1) && (current_temp1<79) && (current_temp1>5)) {
int temp1 = (current_temp1 - (int)current_temp1) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=sensorKotel&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp1, abs(temp1));
sendHTTPRequest();
}
old_temperature1=(int)current_temp1;
}
// TEMP SENSOR 2
float current_temp2=0;
// Соединяемся
// Обработчик ошибок датчика
valid_sensor=1;
switch(tempSensor2.isValid())
{
case 1:
Serial.println("Err T2"); // ошибка контрольной суммы
tempSensor2.reset(); // сбросить девайс
valid_sensor=0;
case 2:
Serial.println("Err T2"); // какой-то "левый" датчик

tempSensor2.reset(); // сбросить девайс
valid_sensor=0;
}
if (valid_sensor==1) {
Serial.println("T2");
current_temp2=tempSensor2.getTemperature(); // получаем температуру
Serial.println(current_temp2);
if ((old_temperature2!=(int)current_temp2) && (current_temp2<50) && (current_temp2>5)) {
int temp1 = (current_temp2 - (int)current_temp2) * 100; // выделяем дробную часть
sprintf(buf, "GET /objects/?object=sensorZal&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp2, abs(temp1));
sendHTTPRequest();
}
old_temperature2=(int)current_temp2;
}
//GARAGE GATES SENSOR
Serial.println("G");
int current_garage=digitalRead(4);
//Serial.println(current_garage);
if (current_garage!=(int)old_garage) {
old_garage=(int)current_garage;
sprintf(buf, "GET /objects/?object=sensorGarage&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_garage);
sendHTTPRequest();
}
//ENTRY GATES SENSOR
Serial.println("E");
int current_entry=digitalRead(5);
//Serial.println(current_entry);
if (current_entry!=(int)old_entry) {
old_entry=(int)current_entry;
sprintf(buf, "GET /objects/?object=sensorEntry&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_entry);
sendHTTPRequest();
}
//MOVEMENT 1 SENSOR
Serial.println("M1");
int current_movement_1=digitalRead(6);
//Serial.println(current_movement_1);
if (current_movement_1!=(int)old_movement_1) {
old_movement_1=(int)current_movement_1;
sprintf(buf, "GET /objects/?object=sensorMovement1&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_movement_1);
sendHTTPRequest();
}
//MOVEMENT 2 SENSOR
Serial.println("M2");
int current_movement_2=digitalRead(7);
//Serial.println(current_movement_2);
if (current_movement_2!=(int)old_movement_2) {
old_movement_2=(int)current_movement_2;
sprintf(buf, "GET /objects/?object=sensorMovement2&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_movement_2);
sendHTTPRequest();
}
//LIGHT SENSOR
Serial.println("L");
int current_light=digitalRead(8);
//Serial.println(current_light);
if (current_light!=(int)old_light) {
old_light=(int)current_light;
sprintf(buf, "GET /objects/?object=sensorLight&op=m&m=statusChanged&status=%i HTTP/1.0", (int)current_light);
sendHTTPRequest();
}
}
-
- Сообщения: 24
- Зарегистрирован: Вт сен 30, 2014 3:36 am
- Благодарил (а): 1 раз
- Поблагодарили: 0
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
Заливаю Ардуино 0023. 0017 с дуней никак не удалось подружить.
- Amarok
- Сообщения: 1427
- Зарегистрирован: Пт дек 14, 2012 12:24 pm
- Откуда: Россия, Нижняя Тура
- Благодарил (а): 460 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
У меня мега и w5100. Значит ли это что заняты только пины 50-52?electric писал(а):Смотря какой шилд. Если самый популярный на чипе W5100, то можно посмотреть на странице документации.dragon rider писал(а):хмм а какие еще порты могут быть заняты эзернетом?
Там написано:
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.
Соответственно Ethernet shield на чипе W5100 (в случае Arduino UNO) занимает порты 10, 11, 12, и 13. Если надо работать с SD-карточкой на этом шилде, то надо освободить еще 4-ый пин...
З.Ы. Поисковики рулят...
Моя Алиска живёт на Proxmox в Debian 12
-
- Сообщения: 24
- Зарегистрирован: Вт сен 30, 2014 3:36 am
- Благодарил (а): 1 раз
- Поблагодарили: 0
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
10й тоже занятBlackWarrior писал(а):У меня мега и w5100. Значит ли это что заняты только пины 50-52?electric писал(а):Смотря какой шилд. Если самый популярный на чипе W5100, то можно посмотреть на странице документации.dragon rider писал(а):хмм а какие еще порты могут быть заняты эзернетом?
Там написано:
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.
Соответственно Ethernet shield на чипе W5100 (в случае Arduino UNO) занимает порты 10, 11, 12, и 13. Если надо работать с SD-карточкой на этом шилде, то надо освободить еще 4-ый пин...
З.Ы. Поисковики рулят...
- Amarok
- Сообщения: 1427
- Зарегистрирован: Пт дек 14, 2012 12:24 pm
- Откуда: Россия, Нижняя Тура
- Благодарил (а): 460 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Скетч Arduino + W5100 обсуждаем, пишем, тестируем
11 - 13 тоже?
Моя Алиска живёт на Proxmox в Debian 12