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(); } }