WIZ812MJ W5100
WIZ812MJ — это ethernet-шилд для подключения к Arduino или STM32.
Встречаются различные версии — wiz810mj, wiz811mj, наверняка есть ещё какие-то, у меня wiz812mj. Чем они отличаются я не интересовался.
Плата построена на базе микроконтроллера W5100.
картинка
Производитель запилил аппаратный TCP/IP стек, а пользователю остаётся только написать заголовки и тело сообщения.
Производитель запилил аппаратный TCP/IP стек, а пользователю остаётся только написать заголовки и тело сообщения.
• Питание — 3.3 вольта.
• Потребление — 140-170мА.
• Интерфейс — SPI (пины толерантны к пяти вольтам).
Datasheet
Примеры подключения и кода приведены для плат Arduino и BluePill (stm32).
распиновка
Arduino
Схема для Arduino Nano, Uno:
Схема для Arduino Mega:
Питание лучше брать от стороннего источника.
Код для Arduino
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 170);
EthernetServer server(80);
int count = 0;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(9, LOW);
delay(100);
digitalWrite(9, HIGH);
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server address ");
Serial.println(Ethernet.localIP());
}
void loop()
{
EthernetClient client = server.available();
if(client)
{
char buff[16] = {0,};
boolean currentLineIsBlank = true;
int i = 0;
while(client.connected())
{
if(client.available())
{
char c = client.read();
Serial.write( c);
if(i < 15)
{
buff[i] = c;
i++;
}
if(c == '\n' && currentLineIsBlank)
{
if(strstr(buff, "LED_on") != NULL) digitalWrite(13, HIGH);
else if(strstr(buff, "LED_off") != NULL) digitalWrite(13, LOW);
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><body>");
client.println("<a href=\"/?LED_on\"\">Led On</a><br /><br />");
client.println("<a href=\"/?LED_off\"\">Led Off</a><br /><br />");
count++;
client.print("Update ");
client.print(count);
client.println("</body></html>");
break;
}
if(c == '\n') currentLineIsBlank = true;
else if(c != '\r') currentLineIsBlank = false;
}
}
delay(1);
client.stop();
Serial.println("client disconnected");
}
}
Код взят из примеров входящих в состав
примеры
Перед прошивкой нужно указать свободный IPAddress ip(192, 168, 1, 170); своей домашней сети, а потом ввести его в браузере 192.168.1.170
В будет выводиться отладочная информация. В частности при старте выводится ip-адрес присвоенный устройству (тот что в скетче указан), а после печатаются ответы (заголовки) браузера…
На страничке в браузере будут две ссылки для вкл/откл
STM32
Код для stm32
Код такой же как и для Ардуино, только взят из примеров для stm32
Раскомментируйте строчку —
Закомментируйте строчки —
Теперь можно прошивать плату…
// W5x00 <--> STM32F103
// SCS <--> PA4 <--> BOARD_SPI1_NSS_PIN
// SCLK <--> PA5 <--> BOARD_SPI1_SCK_PIN
// MISO <--> PA6 <--> BOARD_SPI1_MISO_PIN
// MOSI <--> PA7 <--> BOARD_SPI1_MOSI_PIN
#include <SPI.h>
#include <Ethernet_STM.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 1, 170);
EthernetServer server(80);
int count = 0;
void setup()
{
Serial.begin(115200);
pinMode(PC13, OUTPUT);
pinMode(PA3, OUTPUT);
digitalWrite(PA3, LOW);
delay(100);
digitalWrite(PA3, HIGH);
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server address ");
Serial.println(Ethernet.localIP());
}
void loop()
{
EthernetClient client = server.available();
if(client)
{
char buff[16] = {0,};
boolean currentLineIsBlank = true;
int i = 0;
while(client.connected())
{
if(client.available())
{
char c = client.read();
Serial.write( c);
if(i < 15)
{
buff[i] = c;
i++;
}
if(c == '\n' && currentLineIsBlank)
{
if(strstr(buff, "LED_on") != NULL) digitalWrite(PC13, LOW);
else if(strstr(buff, "LED_off") != NULL) digitalWrite(PC13, HIGH);
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 5"); // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><body>");
client.println("<a href=\"/?LED_on\"\">Led On</a><br /><br />");
client.println("<a href=\"/?LED_off\"\">Led Off</a><br /><br />");
count++;
client.print("Update ");
client.print(count);
client.println("</body></html>");
break;
}
if(c == '\n') currentLineIsBlank = true;
else if(c != '\r') currentLineIsBlank = false;
}
}
delay(1);
client.stop();
Serial.println("client disconnected");
}
}
Собственно и всё, не забудьте указать правильный ip-адрес.
В статье не ставилась задача описания различных вариантов использования, я хотел лишь показать схему подключения и скетч «чтоб заработало». В примерах
… настройка DNS, шлюза, подсети и т.д.
В довершение могу сказать, что если подключить всё не «на соплях» и дать качественное питание (не от ардуины), то девайс работает вполне стабильно.
В процессе ковыряния столкнулся с тем, что в «Монитор порта» возвращался какой-то нелепый ip-адрес, проблема была в плохой «земле» между устройствами.
Всем спасибо
- 0
- stD
7874
Поддержать автора
Комментарии (0)