Vincule o Laboratório Digital NR05 à Internet das Coisas



Neste artigo, mostraremos como, com base no kit do Laboratório Digital NR05, montar um dispositivo que coleta dados de um sensor de temperatura e os envia a um site especializado para armazenar e processar esses dados.

Como observamos repetidamente, o kit Digital Laboratory da série Alphabet of the Electronics Engineer destina-se não apenas a ensinar os princípios da programação de microcontroladores e a projetar dispositivos eletrônicos baseados neles, mas também a criar dispositivos completamente acabados e úteis. Em nosso projeto, usaremos o ThingSpeak, uma plataforma aberta para projetos baseados no conceito da Internet das Coisas. A plataforma foi projetada para coletar e processar dados de vários sensores. As principais características do ThingSpeak são:
- coleta de dados em tempo real;
- processamento de dados matemáticos e estatísticos;
- visualização de dados.

A plataforma ThingSpeak possui uma API desenvolvida (Application Programming Interface) - uma interface entre o site e seus aplicativos, que não apenas permite enviar, armazenar e acessar dados, mas também fornece vários métodos estatísticos para processá-los. Por exemplo, consideraremos um canal para coleta de dados; no total, a plataforma fornece até 8 canais para cada usuário. Com os dados de cada canal, você pode executar ações separadas e usar os resultados a seu critério.

Para acessar a Internet, usaremos um módulo Wi-Fi baseado no chip ESP8266 com a versão 0.21 do firmware AT . Este chip popular serve como base para a construção de um grande número de módulos que diferem fisicamente no número de saídas, tipo de antena, interface USB e recursos adicionais. Em princípio, qualquer dispositivo construído com base no ESP8266 é um dispositivo auto-suficiente ao qual os sensores externos podem ser conectados, mas isso é um assunto que deve ser considerado em separado. Nesse caso, usamos o módulo apenas como um dispositivo para acesso sem fio à Internet e o usaremos para conectar-se a qualquer ponto de acesso e transferir dados para o ThingSpeak. Uma lista de todos os comandos do firmware AT para compará-los com o programa Arduino pode ser encontrada aqui .

Algumas palavras devem ser ditas sobre como verificar a versão do firmware e como atualizar o módulo, se a versão não for adequada. Para fazer isso, conecte o módulo ao adaptador USB-UART, por exemplo, BM8051e emita o comando AT + GMR. Se a versão do firmware for exibida como 0021, tudo estará em ordem. Caso contrário, existem duas maneiras: alterar o programa do Arduino de acordo com as possíveis incompatibilidades dos formatos de comando ou atualizar novamente o módulo. As questões intermitentes do ESP8266 fingem ser um artigo separado; portanto, aqui não as consideraremos, mas recomendamos que você consulte os materiais publicados nos sites e fóruns especializados dedicados a este módulo. Como sensor de temperatura, usamos o sensor DS18B20 incluído no kit NR05. O kit tutorial contém um capítulo sobre como conectar e usar esse sensor, além de exemplos de programação relacionados à leitura e exibição de medições de temperatura. O sensor está conectado aos contatos correspondentes na placa de expansão do kit NR05.

Como módulo baseado no ESP8266, você pode usar vários dispositivos da série Master Kit: MP8266-01 , MP8266-03 , MP8266-07 , MP8266-12E e MP3508 . O último dispositivo é a placa do desenvolvedor e é "cheio" ao máximo. Ele não requer um estabilizador de 3.3V adicional e um adaptador USB-UART para programação - tudo isso já está na placa.

Para os módulos restantes, um adaptador USB-UART pode ser necessário para piscar, se necessário, mas um estabilizador de 3,3V (por exemplo, AMS1117) será necessário, com certeza, uma vez que a fonte dessa tensão na placa Arduino Nano incluída no kit NR05 não fornece a corrente necessária para fonte de alimentação ESP8266.

De qualquer forma, no projeto finalizado, usamos apenas quatro saídas ESP: power, ground e RX e TX para se comunicar com o Arduino.

O algoritmo geral do programa para o Arduino é o seguinte:
- verifique a prontidão do ESP;
- se estiver pronto, conecte-se ao ponto de acesso;

(ações adicionais são repetidas uma vez por minuto):
- lemos os dados do sensor de temperatura;
- exibir a temperatura atual no indicador da placa de expansão;
- estabelecer uma conexão com o site thingspeak.com;
- transfira a temperatura atual para o canal correspondente do site.

Sobre a teoria, talvez o suficiente. Vamos seguir praticando.

Primeiro, registre-se gratuitamente no thingspeak.com e obtenha uma chave de API como resultado do registro, que deve ser usada ao transferir dados para o canal. A interface do site está mudando; portanto, nossa descrição pode ser um pouco inconsistente em termos do que é visível no navegador. Mas, em geral, a interface é intuitiva, portanto, não deve haver problemas sérios ao registrar e criar um novo canal.
Portanto, após o registro, crie um novo canal: Channels-My Channels-New Channel. O canal deve receber um nome e uma descrição curta, assim como o canal pode ser Privado e Público, escolha você mesmo. Depois de criar o canal, você pode ver a chave da API desejada, precisamos da Chave da API de gravação para gravar dados no canal.

Você pode testar o registro de dados inserindo a seguinte linha na linha do navegador:api.thingspeak.com/update?key=yourAPIkey&field1=0
O último caractere da string (0) pode ser qualquer valor, será gravado no canal. Depois de pressionar Enter, o site responderá com um número correspondente ao número de valores gravados no canal. Lembre-se de que o intervalo mínimo entre as gravações é de 15 segundos. Agora você pode transferir dados, formar linhas semelhantes no Arduino e transmiti-las usando o ESP8266 para o nosso canal.

O diagrama de conexão dos elementos é apresentado na figura a seguir:



Como usamos o módulo MP8266-07, precisávamos de um estabilizador e um capacitor. Além disso, para a operação correta do módulo, é necessário conectar o pino GPIO15 ao terra e o pino CH_PD (seleção de chip) com potência de 3,3V. O módulo conecta com segurança até uma antena embutida a um ponto de acesso localizado em uma sala adjacente a uma distância de cerca de 20 metros.

Lista de esboço para Arduino com comentários detalhados:
//
#include <DallasTemperature.h>
#include <OneWire.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
// ,
unsigned long pauseTime = 60000;
//
unsigned long currentTime;
unsigned long previousTime = 0;
// D10 D18B20
// ONE WIRE
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// WiFi
#define SSID «»
#define PASS «»
// IP thingspeak.com
#define IP «184.106.153.149»
// GET API thingspeak.com
String GET = «GET /update?key=API&field1=»;
// ESP8266
// AT- ;
// ( AT- v0.21 SDK 0.9.5
// esp8266.ru/esp8266-sdk-0-9-5-v0-21 )
SoftwareSerial esp(11, 12); // RX, TX
// LCD-
LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);

void setup()
{
// :
esp.begin(9600); // - ESP8266 9600
Serial.begin(9600); // - COM- ( )
sensors.begin(); //
lcd.begin(16, 2); // LCD-
lcd.clear();
// ESP8266 AT
Send(«AT»);
delay(1000);
// OK,
if(esp.find(«OK»)){
Serial.println(«ESP8266 Ready: OK»);
connectWiFi();
previousTime = millis() + 2*pauseTime;
}
}

void loop(){
currentTime = millis();
if(currentTime — previousTime > pauseTime) {
//
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
//
char buffer[10];
String temp = dtostrf(tempC, 4, 1, buffer);
// thingspeak.com
updateData(temp);
lcd.setCursor(0,0);
lcd.print(temp);
lcd.print("\xDF"«C»); // \xDF —
previousTime = currentTime;
}
}

// ESP8266 thingspeak.com
void updateData(String data){
// thingspeak.com
String cmd = «AT+CIPSTART=\»TCP\",\"";
cmd += IP;
cmd += "\",80";
Send(cmd);
delay(3000);
if(esp.find(«OK»))
Serial.println(«CONNECT TO IP: OK»);
else
Serial.println(«CONNECT TO IP: Error»);
//
cmd = GET;
cmd += data;
cmd += "\r\n";
esp.print(«AT+CIPSEND=»);
esp.println(cmd.length());
// ESP8266
if(esp.find(">")){
Serial.print(">");
//
esp.print(cmd);
Serial.print(cmd);
if(esp.find(«OK»)) Serial.println(«DATA SEND: OK»);
else Serial.println(«DATA SEND: Error»);
}
else{
Send(«AT+CIPCLOSE»);
if(esp.find(«OK»)) Serial.println(«CONNECTION FOR IP CLOSE: OK»);
else Serial.println(«CONNECTION FOR IP CLOSE: Error»);
}
Serial.println();
}

// ESP8266
void Send(String cmd){
Serial.print(«SEND TO ESP8266: „);
esp.println(cmd);
Serial.println(cmd);
}

// WiFi
boolean connectWiFi(){
esp.println(“AT+CWMODE=1»);
delay(2000);
String cmd=«AT+CWJAP=\»";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
Send(cmd);
delay(5000);
if(esp.find(«OK»)){
Serial.println(«CONNECT TO WIFI: OK»);
return true;
}
else{
Serial.println(«CONNECT TO WIFI: Error»);
return false;
}
}


Todos os elementos são montados, o programa é lançado:



e aqui estão os resultados das medições no site:



O primeiro gráfico mostra a mudança de temperatura ao longo do tempo e o segundo é um histograma criado pelas ferramentas de visualização baseadas em MatLab, integradas ao ThingSpeak, que exibe quantas vezes nas últimas 24 horas cada valor de temperatura é medido. No site, esse histograma é chamado de "variação de temperatura", o termo russo mais próximo é flutuação de temperatura.

Assim, usando a suíte Digital Laboratory em combinação com o serviço fornecido pela plataforma ThingSpeak, é possível coletar e processar dados de vários sensores em um máximo de oito canais. Por exemplo, usando o circuito do voltímetro de quatro canais descrito no artigo anterior, você pode monitorar as condições das baterias ou painéis solares enquanto recebe informações sobre o clima no local da instalação.

Source: https://habr.com/ru/post/pt394357/


All Articles