Easy Module Shield v 1 Представляет многофункциональную плату расширения, выполненную в виде шилда для установки на Arduino UNO R3.
Связка Arduino + Ethernet shield позволяет создавать устройства, реализующие концепция Internet of things ("Интернет вещей"), согласно которой доступ к данным датчиков или управление испонительными устройствами может быть обеспечено из любой точки мира. Но ни плата плата Arduino, ни Ethernet shield не содержат ни датчиков, ни исполнительных устройств. Их надо подключать. Easy Module Shield v 1- это универсальная плата для построения устройств для Интернета вещей (как измерение, так и управление), потому что на ней уже присутствуют датчики и устройства.
На плате установлены следующие датчики и устройства:
- цифровой датчик температуры и влажности DHT11 (подключен к D4);
- аналоговый датчик температуры LM35 (A2);
- аналоговый датчик освещенности (A1);
- приемник ИК сигналов с пульта (D6);
- динамик для генерации простейших звуковых сигналов (D5);
- две кнопки (D2, D3);
- потенциометр (A0);
- cветодиод синий D13;
- cветодиод красный D12;
- RGB светодиод (D9, D10, D11).
Есть возможность подключения еще одного аналогового датчика (например, датчика влажности почвы) и нескольких цифровых (например цифровой датчик температуры DS18B20).
Также можно подключить устройства с интерфейсом UART (GPS модуль или Bluetooth) и интерфейсом I2C (барометр или гироскоп).
Схема Easy Module Shield v 1
Кроме того выведены разъемы для подключения еще одного аналогового датчика (контакт A3) и нескольких цифровых (контакты D7, D8). К аналоговому входу можно подключить, например датчик влажности почвы SoilMoisture, к цифровому входу можно подсоединить несколько датчиков температуры DS18B20. Также есть возможность подключать устройства с интерфейсом UART (например, GPS модуль или Bluetooth) и интерфейсом I2C (например, барометр или гироскоп).
Рассмотрим пример отправки данных влажности воздуха (DHT11) и температуры воздуха (LM35) с платы Easy Module Shield v 1 в облачный сервис
data.sparcfun.com. Это бесплатный сервис для сохранения и отображения данных, отправляемых с IoT-устройств.
Переходим на основную страницу проекта http://data.sparcfun.com.
Для отправки данных в сервис необходимо создать поток. Нажимаем на кнопку
CREATE и на открывшейся странице заполняем данные для нашего потока –
Название, описание, названия передаваемых в поток параметров (Fields), теги, местоположение.
Вводим в качестве параметров Fields:
- dht11_humidity – для показаний влажности воздуха датчика DHT11;
- lm35_temp – для показаний температуры датчика LM35.
Для сохранения нажимаем кнопку
Save. Открывается страница с данными для нашего потока. Для передачи данных с нашего устройства в сервис нам понадобятся следующие данные:
Формат отправки данных
http://data.sparkfun.com/input/[publicKey]?private_key=[privateKey]&dht11_humidity=[value]&lm35_temp=[value] Страница для просмотра отправленных данных
https://data.sparkfun.com/streams/LQm5nXj7E1fjONaJLoGw Теперь собираем наше устройство (Arduino + Ethernet shield + Easy Module Shield), подключаем к сети Интернет и загружаем в него скетч (вам необходимо изменить параметры сетевого подключения на свои).
// датчик влажности воздуха
#define PIN_DHT 4
// датчик температуры LM35
#define PIN_LM35 A2
// dht
#include "DHT.h"
// тип датчика dht
#define DHTTYPE DHT11
// создать экземпляр DHT
DHT dht(PIN_DHT, DHTTYPE);
// Ethernet
#include
#include
// 1-dhcp, 0 - manual
#define DHCP 0
// mac-адрес Ethernet shield
byte arduino_mac[] = { 0xFF, 0xFE, 0xFB, 0xFA, 0xF9, 0xF8 };
EthernetClient client;
// если адрес статический
// (установить #define DHCP 1)
int mip[4]={192,168,0,121};
int mmask[4]={255,255,255,0};
int mgateway[4]={192,168,0,28};
int mdns[4]={192,168,1,1};
// для data.sparkFun
char server[] = "data.sparkfun.com";
const String publicKey = "LQm5nXj7E1fjONaJLoGw";
const String privateKey = "A19pd0zJeksbxBNVvnl9";
const byte NUM_FIELDS = 2;
const String fieldNames[NUM_FIELDS] = {"dht11_humidity", "lm35_temp"};
int fieldData[NUM_FIELDS];
void setup() {
Serial.begin(9600);
// установка сетевого соединения
ethernet_begin();
print_ip();
// инициализация dht11
dht.begin();
}
void loop() {
fieldData[0]=get_dht11();
fieldData[1]=get_lm35()-20;
Serial.print(fieldNames[0]);Serial.print("=");
Serial.println(fieldData[0]);
Serial.print(fieldNames[1]);Serial.print("=");
Serial.println(fieldData[1]);
sendData();
delay(30000);
}
// запустить ethernet
void ethernet_begin()
{
if(DHCP==1)
{
if(Ethernet.begin(arduino_mac)==0)
Serial.println("dhcp - error");
else
Serial.println("dhcp - ok");
}
else
{
IPAddress arduino_ip(mip[0],mip[1],mip[2],mip[3]);
IPAddress dns_ip(mdns[0],mdns[1],mdns[2],mdns[3]);
IPAddress gateway_ip(mgateway[0],mgateway[1],mgateway[2],mgateway[3]);
IPAddress subnet_mask(mmask[0],mmask[1],mmask[2],mmask[3]);
Ethernet.begin(arduino_mac, arduino_ip, dns_ip, gateway_ip, subnet_mask);
}
}
// вывести ip-адрес
void print_ip()
{
Serial.print("My IP address: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
// print the value of each byte of the IP address:
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
Serial.print("My SUBNET: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
Serial.print(Ethernet.subnetMask()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
Serial.print("My GATEWAYIP: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
Serial.print(Ethernet.gatewayIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
Serial.print("My DNS: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
Serial.print(Ethernet.dnsServerIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
}
// получить показания с датчика DHT
int get_dht11()
{
float fhumidity;
fhumidity=dht.readHumidity();
if (isnan(fhumidity))
{
return 1000;
}
return int(fhumidity);
}
// получить показания LM35 - датчик температуры
int get_lm35()
{
double val=analogRead(PIN_LM35);
double voltage=val*5.00/1024;
double temp=voltage*100-273;
return int(temp);
}
// отправка данных
void sendData()
{
// Подключиться к хосту
if (client.connect(server, 80))
{
// Host: data.sparkfun.comn
// Connection: closen
//
client.print("GET /input/");
client.print(publicKey);
client.print("?private_key=");
client.print(privateKey);
for (int i=0; i {
client.print("&");
client.print(fieldNames[i]);
client.print("=");
client.print(fieldData[i]);
}
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
client.println();
client.stop();
client.flush();
}
else
{
Serial.println(F("Connection failed"));
client.stop();
client.flush();
}
}
Вывод данных в последовательный порт
И на странице https://data.sparkfun.com/streams/LQm5nXj7E1fjONaJLoGw видим отображение поступающих данных.
Скачать данный скетч и библиотеку DHT11
Описание Easy Module Shield v 1 PDF