LCD Keypad Shield и Arduino

13-12-2020, 16:26 0 комментариев
В данной статье рассмотрим подключение Arduino Ethernet shield к Ардуино. Этот шилд создан для обмена информацией между локальной сетью и контроллером, а потому он довольно часто используется в современных проектах. Кроме того, плата имеет оптимальные технические параметры работы, о которых поговорим далее.

Shield основан на микрочипе W51000 с внутренним буфером на 16К. Имеется разъем для подключения microSD карты памяти, с помощью которой можно хранить приличные объемы информации и даже загружать веб-ресурсы прямо со среды Arduino. Помните – в таком случае нужны дополнительные библиотеки. Об остальных базовых характеристиках читайте далее:
  • напряжение питания: 5V;
  • скорость обмена Internet: 10/100 Mb/сек;
  • интегрирована кнопка RESET + индикаторы работы проводного интерфейса.
Подключение к Arduino Ethernet shield W5100 по интерфейсу SPI схематически выглядит следующим образом:
Как видите, модуль просто надевается на плату.

Для проверки работоспособности микросхемы будем использовать стандартную библиотеку Ethernet library – она обычно входит в комплект поставки Arduino IDE, потому нет необходимости что-либо искать и скачивать по отдельности.

Заливаем следующий скетч:
#include "Ethernet.h"
 
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "www.google.com";    // name address for Google (using DNS)
 
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 0, 177);
 
// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;
 
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
 
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");
 
  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.1");
    client.println("Host: www.google.com");
    client.println("Connection: close");
    client.println();
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}
 
void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
 
  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
 
    // do nothing forevermore:
    while (true);
  }
}

Покажем еще одну схему подключения рассматриваемого модуля и светодиодов:


В прошивке будет использоваться та же библиотека:
#include <SPI.h>
#include <Ethernet2.h>
// mac-адрес платы и ip-адрес сервера
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,7);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
int pins[] = { 7, 8}; // Пины для светодиодов
int pinState[] = {0, 0}; // Состояние пинов
String getData="";
boolean startGet=false;
void setup()
{
Serial.begin(9600);
for(int i=0;i<2;i++)
{
pinMode(pins[i],OUTPUT); // контакты подключения светодиодов
digitalWrite(i,LOW); // выключить светодиоды
}
// инициализации библиотеки Ethernet server
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
// ожидание подключения клиентов
EthernetClient client = server.available();
if (client)
{
boolean currentLineIsBlank = true;
while (client.connected())
{
if (client.available())
{
char c = client.read();
if(startGet==true) // данные после '?'
getData+=c;
if(c == '?') // начало сбора данных после '?'
startGet=true;
if (c == '\n' && currentLineIsBlank) // окончание получения
{
if(getData.length()<1) // запрос без get-данных
{
pinState[0]=0;
pinState[1]=0;
}
else
{
pinState[0]=int(getData[5])-48;
pinState[1]=int(getData[12])-48;
}
// отправка заголовков клиенту
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
// формирование страницы ответа
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<h3>Ethernet shield + LEDS</h3>");
client.println("<form method='get'>");
// светодиод 1
client.print("<div>");
client.print("led1 off<input type='radio' name='led1' value=0 onclick='document.getElementById(\"submit\").click();' ");
if (pinState[0] == 0)
client.print("checked");
client.println(">");
client.print("<input type='radio' name='led1' value=1 onclick='document.getElementById(\"submit\").click();' ");
if (pinState[0] == 1)
client.print("checked");
client.println("> on");
client.println("</div>");
// светодиод 2
client.print("<div>");
client.print("led2 off<input type='radio' name='led2' value=0 onclick='document.getElementById(\"submit\").click();' ");
if (pinState[1] == 0)
client.print("checked");
client.println(">");
client.print("<input type='radio' name='led2' value=1 onclick='document.getElementById(\"submit\").click();' ");
if (pinState[1] == 1)
client.print("checked");
client.println("> on");
client.println("</div>");
client.println("<input type='submit' id='submit' style='visibility:hidden;' value='Refresh'>");
client.println("</form>");
client.println("</html>");
break;
}
if (c == '\n')
{currentLineIsBlank = true;}
else if (c != '\r')
{currentLineIsBlank = false;}
}
}
}
// задержка для получения клиентом данных
delay(1);
// закрыть соединение
client.stop();
for(int i=0;i<2;i++) // светодиоды включить или выключить
{digitalWrite(pins[i],pinState[i]);}
startGet=false;
getData="";
}
Есть несколько важных моментов при настройке модуля для дальнейшей работы. Первое: для того, чтобы определить IP адрес платы, нужно открыть скетч DhcpAddressPrinter. Найти его можно в меню IDE: File - Examples - Ethernet – DhcpAddressPrinter. Второе: если MAC-адрес не указан на стикере устройства, его можно сгенерировать и настроить.

И напоследок пару слов об основных областях применения модуля: создание управляющих модулей, реализующих конфигурации с помощью интерфейса меню. Дисплей можно использовать для вывода информации, получаемой с различных датчиков, а также в качестве веб-сервера для загрузки HTML страниц.

Необходимо подключение к Интернету? Стремитесь к удаленному управлению девайсами (роботами, смарт-техникой)? С этой платой вы сможете все!
Поделись в социальных сетях:
О авторе
Калугин Антон

Программист микроконтроллеров с 8-ми летним стажем, работал в таких компаниях как IBM, ASUS, Microsoft.

В комментариях с радостью отвечу на ваши вопросы.

Все статьи автора
Похожие новости

Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...

В этой статье мы рассмотрим подключение ADS1115 к Ардуино. Речь идет о 16-битном аналого-цифровом преобразователе, оснащенном 4 входами непосредственно для...

В новом информационном обзоре рассматриваем GSM модуль SIM800L к Arduino. Почему выбрано именно это устройство? Во-первых, оно достаточно известно и популярно...

Предлагаем на обзор подключение LCD дисплея на базе HD44780 к Ардуино. Модуль выбран как всегда не случайно, т.к. имеет определенные преимущества, о которых...

Модуль энкодер KY-040 является электромеханическим устройством, а точнее - датчиком угла поворота и вращения оси различных девайсов. Непосредственно сам прибор...

Оставить комментарий