Ethernet Shield на базе WIZnet w5100: различия между версиями
Artecoll (обсуждение | вклад) |
Artecoll (обсуждение | вклад) |
||
Строка 41: | Строка 41: | ||
void loop() {} | void loop() {} | ||
</syntaxhighlight>'''Проект использования платы Arduino с Ethernet shield в качестве сервера | </syntaxhighlight> | ||
'''Проект использования платы Arduino с Ethernet shield в качестве сервера.''' | |||
Модуль формирует при обращении к нему страницу с показаниями, подключенных к нему датчиков. После загрузки проекта, в браузер вбиваем наш IP-адрес сервера и видим страницу с показаниями температуры и влажности. | |||
[[Файл:Схема с BMP280.jpg|обрамить|центр|Схема подключения BMP280 к Ethernet Shield]] | |||
<syntaxhighlight lang="c"> | |||
// подключение библиотек | |||
#include <SPI.h> | |||
#include <Ethernet.h> | |||
#include <Wire.h> | |||
#include <Adafruit_Sensor.h> | |||
#include <Adafruit_BMP280.h> | |||
#define ETH Ethernet | |||
byte mac[]={0x33, 0x33, 0x33, 0x33, 0x33, 0x33}; | |||
byte ip[]={***,***,***,***}; | |||
byte dns[]={***,***,***,***}; | |||
byte gtway[]={***,***,***,***}; | |||
byte subnet[]={***,***,***,***}; | |||
// сервер | |||
EthernetServer srv (80); | |||
// создание экземпляра датчика | |||
Adafruit_BMP280 sensor; // I2C | |||
void setup() { | |||
Serial.begin(9600); | |||
ETH.begin(mac, ip, dns, gtway, subnet); | |||
delay(1000); | |||
srv.begin(); | |||
Serial.println(ETH.localIP()); | |||
bmp.begin(); | |||
} | |||
void loop() { | |||
// | |||
EthernetClient W5100 = server.available(); | |||
if (W5100) { | |||
int blank = 1; | |||
while (W5100.connected()) { | |||
if (W5100.available()) { | |||
char s = W5100.read(); | |||
Serial.write(s); | |||
if (s == '\n' && blank==1) { | |||
// | |||
W5100.println("HTTP/1.1 200 OK"); | |||
W5100.println("Content-Type: text/html"); | |||
W5100.println("Connection: close"); | |||
W5100.println("Refresh: 10"); // обновление каждые 10 сек | |||
W5100.println(); | |||
// | |||
W5100.println(""); | |||
W5100.println(""); | |||
W5100.print("Sensor BMP280"); | |||
W5100.print("T = "); | |||
W5100.print(bmp.readTemperature()); | |||
W5100.print(" *C"); | |||
W5100.print("P = "); | |||
W5100.print(bmp.readPressure()/133.3224); | |||
W5100.print(" mm hg st"); | |||
W5100.println(""); | |||
break; | |||
} | |||
if (s == '\n') { | |||
blank = 1; | |||
} else if (s != '\r') { | |||
blank = 0; | |||
} | |||
} | |||
} | |||
delay(1); | |||
W5100.stop(); | |||
} | |||
} | |||
</syntaxhighlight> |
Текущая версия от 22:45, 14 июня 2021
Ethernet Shield - плата расширения, позволяющая Arduino работать в локальных вычислительных сетях для приёма и передачи данных в сети Интернет. Плата основана на чипе Wiznet w5100.
Подключение к Arduino
Ethernet shield выпускается в формате шилда, т.е. устанавливается поверх платы Arduino (см. рисунок ниже). На плате присутствует разъем для подключения microSD карт. Плата Arduino взаимодействует как с w5100, так и с SD-картой, по протоколу SPI. Вывод 10 используется для выбора w5100 и вывод 4 для выбора SD-карты, одновременно может быть активно только одно устройство.
Технические характеристики
- Напряжение питания — 5 В;
- Контроллер — W5100;
- Поддержка до 4-х соединений;
- Скорость подключения — 10 и 100 Мбит/с;
- Разъем для карт памяти — micro-SD;
- Протокол обмена данными — SPI;
- Габариты — 74х54х27 мм.
Примеры использования
Скетч для получения IP-адреса по DHCP
#include <Ethernet.h> //Библиотеки
#include <SPI.h> //Arduino
#define ETH Ethernet
byte mac[]={0x33, 0x33, 0x33, 0x33, 0x33, 0x33};
void setup() {
Serial.begin(9600);
if (ETH.begin(mac) == 0) {
Serial.println("Failed!");
}
else{
Serial.print("ip=");
for (int k = 0; k < 4; k++) {
Serial.print(ETH.localIP()[k], DEC);
Serial.print(".");
}
Serial.println();
}
}
void loop() {}
Проект использования платы Arduino с Ethernet shield в качестве сервера.
Модуль формирует при обращении к нему страницу с показаниями, подключенных к нему датчиков. После загрузки проекта, в браузер вбиваем наш IP-адрес сервера и видим страницу с показаниями температуры и влажности.
// подключение библиотек
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define ETH Ethernet
byte mac[]={0x33, 0x33, 0x33, 0x33, 0x33, 0x33};
byte ip[]={***,***,***,***};
byte dns[]={***,***,***,***};
byte gtway[]={***,***,***,***};
byte subnet[]={***,***,***,***};
// сервер
EthernetServer srv (80);
// создание экземпляра датчика
Adafruit_BMP280 sensor; // I2C
void setup() {
Serial.begin(9600);
ETH.begin(mac, ip, dns, gtway, subnet);
delay(1000);
srv.begin();
Serial.println(ETH.localIP());
bmp.begin();
}
void loop() {
//
EthernetClient W5100 = server.available();
if (W5100) {
int blank = 1;
while (W5100.connected()) {
if (W5100.available()) {
char s = W5100.read();
Serial.write(s);
if (s == '\n' && blank==1) {
//
W5100.println("HTTP/1.1 200 OK");
W5100.println("Content-Type: text/html");
W5100.println("Connection: close");
W5100.println("Refresh: 10"); // обновление каждые 10 сек
W5100.println();
//
W5100.println("");
W5100.println("");
W5100.print("Sensor BMP280");
W5100.print("T = ");
W5100.print(bmp.readTemperature());
W5100.print(" *C");
W5100.print("P = ");
W5100.print(bmp.readPressure()/133.3224);
W5100.print(" mm hg st");
W5100.println("");
break;
}
if (s == '\n') {
blank = 1;
} else if (s != '\r') {
blank = 0;
}
}
}
delay(1);
W5100.stop();
}
}