Содержание статьи
Содержание

Главная / Проекты с Arduino / Arduino + Wifi-модуль ESP8266 и датчик температуры

Arduino + Wifi-модуль ESP8266 и датчик температуры

В статье рассмотрен проект с использованием модуля ESP8266 и Arduino. На выходе мы получим возможность обновлять данные на удаленном сервере с использованием цифрового датчика температуры.

В чем прелесть этого проекта? Он действительно идет в ногу со временем. Временем (р)эволюции интернет возможностей. Цены падают, а сообщество DIY-энтузиастов разрабатывают новые подходы для решения своих задач.

Приведенный ниже проект обойдется вам около 10 долларов с учетом всех необходимых компонентов, в том числе платы Arduino. Проект можно адаптировать и под другие микроконтроллеры.

Необходимые материалы

Настройка ESP8266

Распиновка ESP8266

В этой части возникают основные проблемы. Обратите внимание, что существует две версии модуля ESP8266. На первой версии встроенные сигнальный светодиоды, которые расположены рядом с пинами. На второй (более новой) модели светодиоды находятся рядом с антенной. В этом проекте мы будем использовать более новую версию модуля ESP8266.

Советую сразу загрузить Firmware V0.922, с помощью которого можно устанавливать скорость передачи данных на 9600.

Для проверки соединения можно использовать USB-TTL кабель и терминал CoolTerm. Команда для изменения скорости передачи данных: AT+CIOBAUD=9600

Ниже приведены пины, которые использовались на ESP8266 для подключения USB-TTL. Для питания ESP8266 использовался пин 3.3V VCC на Arduino. Обратите внимание, что максимальная сила тока на пине 3.3V VCC составляет 150 мА, максимальный ток на ESP8266 достигает 240 мА. Но, за неимением другого источника тока, можно использовать и этот вариант. Обычно модуль ESP8266 использует 70мА.

Не забудьте подключить GPIO0 к GND при загрузке нового firmware. После использования, отключите этот коннектор для нормальной работы.

---------------------------------------------------------------------------------------------------------

UTXD --> RX (USB-TTL)

CH_PD <--> VCC

RST

VCC --> VCC (источник питания)

---------------------------------------------------------------------------------------------------------

GND --> GND (источник питания)

GPIO2

GPIO0

URXD --> TX (USB-TTL)

---------------------------------------------------------------------------------------------------------

Настройка Arduino и скетч

Подключение ESP8266 к Arduino

---------------------------------------------------------------------------------------------------------

UTXD --> RX на Arduino

CH_PD <--> VCC

RST

VCC --> VCC на Arduino

---------------------------------------------------------------------------------------------------------

GND --> GND на Arduino

GPIO2

GPIO0

URXD --> TX на Arduino

---------------------------------------------------------------------------------------------------------

Подключение цифрового датчика температуры к Arduino

---------------------------------------------------------------------------------------------------------

Arduino GND -- > DS18B20 GND(1) -- > DS18B20 VDD(3)

DS18B20 DQ(2) -- > 4.7кОм R --> VCC на Arduino 3.3В

---------------------------------------------------------------------------------------------------------

#include

#include

#include

#include

#define ONE_WIRE_BUS 8

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

#define SSID "[YOUR_SSID]"

#define PASS "[YOUR_PASSWORD]"

#define IP "184.106.153.149" // thingspeak.com

String GET = "GET /update?key=[THINGSPEAK_KEY]&field1=";

SoftwareSerial monitor(10, 11); // RX, TX

void setup()

{

monitor.begin(9600);

Serial.begin(9600);

sensors.begin();

sendDebug("AT");

delay(5000);

if(Serial.find("OK")){

monitor.println("RECEIVED: OK");

connectWiFi();

}

}

void loop(){

sensors.requestTemperatures();

float tempC = sensors.getTempCByIndex(0);

tempC = DallasTemperature::toFahrenheit(tempC);

char buffer[10];

String tempF = dtostrf(tempC, 4, 1, buffer);

updateTemp(tempF);

delay(60000);

}

void updateTemp(String tenmpF){

String cmd = "AT+CIPSTART=\"TCP\",\"";

cmd += IP;

cmd += "\",80";

sendDebug(cmd);

delay(2000);

if(Serial.find("Error")){

monitor.print("RECEIVED: Error");

return;

}

cmd = GET;

cmd += tenmpF;

cmd += "\r\n";

Serial.print("AT+CIPSEND=");

Serial.println(cmd.length());

if(Serial.find(">")){

monitor.print(">");

monitor.print(cmd);

Serial.print(cmd);

}else{

sendDebug("AT+CIPCLOSE");

}

if(Serial.find("OK")){

monitor.println("RECEIVED: OK");

}else{

monitor.println("RECEIVED: Error");

}

}

void sendDebug(String cmd){

monitor.print("SEND: ");

monitor.println(cmd);

Serial.println(cmd);

}

boolean connectWiFi(){

Serial.println("AT+CWMODE=1");

delay(2000);

String cmd="AT+CWJAP=\"";

cmd+=SSID;

cmd+="\",\"";

cmd+=PASS;

cmd+="\"";

sendDebug(cmd);

delay(5000);

if(Serial.find("OK")){

monitor.println("RECEIVED: OK");

return true;

}else{

monitor.println("RECEIVED: Error");

return false;

}

}

Совет. После того как вы провели testing/monitoring, загрузите тот же скетч без серийного монитора. Отрабатывает лучше.

#include

#include

#include

#define ONE_WIRE_BUS 8

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

#define SSID "[YOUR_SSID]"

#define PASS "[YOUR_PASSWORD]"

#define IP "184.106.153.149" // thingspeak.com

String GET = "GET /update?key=[THINGSPEAK_KEY]&field1=";

void setup()

{

Serial.begin(9600);

sensors.begin();

Serial.println("AT");

delay(5000);

if(Serial.find("OK")){

connectWiFi();

}

}

void loop(){

sensors.requestTemperatures();

float tempC = sensors.getTempCByIndex(0);

tempC = DallasTemperature::toFahrenheit(tempC);

char buffer[10];

String tempF = dtostrf(tempC, 4, 1, buffer);

updateTemp(tempF);

delay(60000);

}

void updateTemp(String tenmpF){

String cmd = "AT+CIPSTART=\"TCP\",\"";

cmd += IP;

cmd += "\",80";

Serial.println(cmd);

delay(2000);

if(Serial.find("Error")){

return;

}

cmd = GET;

cmd += tenmpF;

cmd += "\r\n";

Serial.print("AT+CIPSEND=");

Serial.println(cmd.length());

if(Serial.find(">")){

Serial.print(cmd);

}else{

Serial.println("AT+CIPCLOSE");

}

}

boolean connectWiFi(){

Serial.println("AT+CWMODE=1");

delay(2000);

String cmd="AT+CWJAP=\"";

cmd+=SSID;

cmd+="\",\"";

cmd+=PASS;

cmd+="\"";

Serial.println(cmd);

delay(5000);

if(Serial.find("OK")){

return true;

}else{

return false;

}

}

Настройка ThingSpeak

ThinkSpeak - потрясающий! Правда, он очень облегчает жизнь. Для его настройки, достаточно реализовать несколько приведенных ниже шагов:

Интерфейс в ThingSpeak

1. Зарегистрируйте FREE аккаунт здесь.

2. Перейдите в Channels --> Create New Channel (вы можете оставить все настройки по умолчанию)

3. Перейдите в API Keys и получите свой уникальный KEY

4. Проведите проверку, вставив в строку вашего браузера следующее:

http://api.thingspeak.com/update?key=[THINGSPEAK_KEY]&field1=0

5. Результаты будут здесь:

http://api.thingspeak.com/channels/[CHANNEL_ID]/feed.json?key=[THINGSPEAK_KEY]

Все! Вы можете отсылать данные температуры с помощью модуля ESP8266 в интернет.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!