将Digital Lab NR05链接到物联网



在本文中,我们将展示如何基于数字实验室套件NR05,组装一种从温度传感器收集数据并将其发送到专门站点以存储和处理此类数据的设备。

正如我们反复指出的那样,“电子工程师”字母表中的“数字实验室”工具包不仅旨在教授微控制器编程的原理并基于这些原理设计电子设备,而且还旨在创建完全完成且有用的设备。在我们的项目中,我们将使用ThingSpeak,这是一个基于物联网概念的开放项目平台。该平台旨在收集和处理来自各种传感器的数据。 ThingSpeak的主要功能是:
-实时数据收集;
-数学和统计数据处理;
-数据可视化。

ThingSpeak平台具有开发的API(应用程序编程接口),这是站点与应用程序之间的接口,不仅允许您发送,存储和访问数据,还提供了处理它们的各种统计方法。例如,我们将考虑一个收集数据的渠道;该平台总共为每个用户提供多达8个渠道。利用每个通道的数据,您可以执行单独的操作并自行决定使用结果。

要访问Internet,我们将使用基于ESP8266芯片且AT固件版本为0.21的Wi-Fi模块。这种流行的芯片是构建大量模块的基础,这些模块在输出数量,天线类型,USB接口和其他功能方面在物理上有所不同。原则上,任何基于ESP8266构建的设备都是自给自足的设备,可以连接外部传感器,但这是需要单独考虑的主题。在这种情况下,我们仅将该模块用作无线Internet访问的设备,并且将使用该模块连接到任何访问点并将数据传输到ThingSpeak。可以在此处找到将所有AT固件命令与Arduino程序进行比较的所有命令列表

如果版本不适合,应该说几句有关如何检查固件版本以及如何升级模块的信息。为此,请将模块连接到USB-UART适配器,例如BM8051,然后发出AT + GMR命令。如果固件版本显示为0021,则一切正常。如果不是,则有两种方法:根据命令格式的可能不匹配更改Arduino的程序,或重新刷新模块。 ESP8266闪烁的问题假装在另一篇文章中,因此在这里我们不考虑它们,但建议您参考在专门用于此模块的网站和专门论坛上发布的材料。作为温度传感器,我们使用NR05套件中随附的DS18B20传感器。教程套件包含有关连接和使用此传感器的章节,以及有关读取和显示温度测量值的编程示例。传感器连接到NR05套件扩展板上相应标记的触点。

作为基于ESP8266的模块,您可以使用Master Kit范围内的多个设备:MP8266-01MP8266-03MP8266-07MP8266-12EMP3508。最后一个设备是开发人员的面板,并且已“塞满”到最大。它不需要额外的3.3V稳定器和USB-UART适配器即可进行编程-所有这些已经在板上。

对于其余模块,如有必要,可能需要USB-UART适配器进行闪烁,但是肯定需要3.3V稳定器(例如AMS1117),因为NR05套件中包含的Arduino Nano板中的该电压源无法提供所需的电流。电源ESP8266。

无论如何,在完成的项目中,我们仅使用四个ESP输出:电源,地以及RX和TX与Arduino通信。

Arduino程序的一般算法如下:
-检查ESP的准备情况;
-如果准备就绪,请连接到接入点;

(每分钟重复一次进一步的动作):
-我们从温度传感器读取数据;
-在扩展卡的指示器上显示当前温度;
-建立与Thingspeak.com网站的连接;
-将当前温度传输到站点的相应通道。

关于理论,也许足够了。让我们继续练习。

首先,在Thingspeak.com上免费注册并获得注册后的API密钥,该密钥必须在将数据传输到通道时使用。网站的界面正在发生变化,因此就浏览器中可见内容而言,我们的描述可能略有不一致。但是通常,该界面是直观的,因此在注册和创建新频道时应该不会有任何严重的问题。
因此,注册后,创建一个新频道:Channels-My Channels-New Channel。必须为频道指定名称和简短说明,并且频道可以是“私人”和“公共”,请自行选择。创建通道后,您可以看到所需的API密钥,我们需要Write API Key才能将数据写入通道。

您可以通过在浏览器行中输入以下行来测试数据记录:api.thingspeak.com/update?key=yourAPIkey&field1=0
字符串(0)中的最后一个字符可以是任何值,它将被写入通道。按下Enter键后,站点将使用与通道中记录的值数量相对应的数字进行响应。请记住,两次录制之间的最小间隔为15秒。现在您可以传输数据,在Arduino中形成类似的行,并使用ESP8266将它们传输到我们的通道。

下图显示了这些元件的连接图:



我们使用了MP8266-07模块,因此我们需要一个稳定器和一个电容器。另外,为了使模块正确运行,必须将GPIO15引脚接地,并将CH_PD引脚(芯片选择)连接至3.3V电源。该模块甚至可以将内置天线连接到相距约20米的相邻房间中的接入点。

Arduino的草图清单,带有详细的注释:
//
#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;
}
}


所有元素都已组装好,程序启动了:



这是现场的测量结果:



第一个图显示了温度随时间的变化,第二个图是ThingSpeak内置的基于MatLab的可视化工具创建的直方图,显示了过去24小时内的次数测量每个温度值。在现场,这种直方图称为“温度变化”,最接近的俄语术语是温度波动。

因此,结合使用Digital Laboratory套件和ThingSpeak平台提供的服务,最多可以在八个通道中收集和处理来自各种传感器的数据。例如,使用上一篇文章中所述的四通道电压表电路,您可以监视电池或太阳能电池板的状况,同时在安装地点接收天气信息。

Source: https://habr.com/ru/post/zh-CN394357/


All Articles