OneNet+EDP+arduino uno+ESP8266+4路5V继电器+dht11+GY30
时间:2022-12-13 13:30:00
目录
一、设备接线
二、相关代码
三、云平台连接
四、onenet平台搭建
五、数据可视化
六、项目总结
一、设备接线
1、DHT11温湿度传感器
孔一面朝上,从左到右为1-4号,1号接电源,2号接8号引脚,3号不接,4号接地。
2、GY-30光照传感器
VCC接Arduino的5V,GND接GND,SDA接A4,SCL接A5,ADD是地址引脚,单个sensor工作时间不时间
3、ESP8266
VCC接3.3V,GND接GND,TX接RX、RX接TX。
4、ESP32-cam
IO0接GND短接、5V接5V、GND接GND、UOT接RX、UOR接TX。
5、继电器
VCC--->5V、GND--->GND、IN1--->arduino11号引脚、IN2接12号引脚,Com(公共端口)--->水泵正极、NO(常开)--->5V。
6、水泵:
正极(红色)接继电器Com接地口,负极(黑色)。
7.面包板的使用和接线:
连接面包板两侧的红蓝线3.3V和接地与5V与接地相同,同侧竖排接口功能相同。
面包板中间左右两侧,两侧不相连,同排5孔内相连。
8、11、12用杜邦线A4、A5引脚和A4,A连接到面包板上。
将ESP8266、DHT11和GY-30与面包板上相应的杜邦线同排连接。
二、相关代码
2.1 核心代码的传感器
2.1.1 温湿度传感器
void ht(){
int chk = DHT11.read(DHT11_PIN);
int tem=(float)DHT11.temperature; ///给温度值tem
int hum=(float)DHT11.humidity; ///给湿度值hum
Serial.print("Tempeature:"); //打印
Tempeature:
Serial.print(tem); //打印温度结果
Serial.println("℃");
Serial.print("Humidity:"); //打印出Humidity:
Serial.print(hum); //打印湿度结果
Serial.println("%"); ////打印%
wendu=tem;
shidu=hum;
2.1.2 光照传感器
void val(){
int val = 0;
Wire.begin();
Wire.beginTransmission(ADDR);
Wire.write(0b00000111);
Wire.endTransmission();
Wire.beginTransmission(ADDR);
Wire.write(0b00100000);
Wire.endTransmission();
Wire.requestFrom(ADDR, 2);
for (val = 0; Wire.available() >= 1; ) {
char c = Wire.read();
val = (val << 8) (c & 0xFF);
}
val = val / 1.2;
Serial.print("Guangzhao: ");
Serial.print(val);
Serial.println("cd");
guangzhao=val;
}
2.2 波特率引脚控制
Serial.begin(115200);
pinMode(8,OUTPUT);
pinMode(A5,INPUT);
pinMode(A4,OUTPUT);
三、云平台连接
3.1 AT指令手动联网
由于产品第一次直接连接不好,首先使用AT手动联网指令。
代码如下图所示:
编译成功后,连接设备,点击上传,打开串口监视器(右上角放大图标)。
串口监视器设置:波特率115200;NL;
等待显示“ok ready”。
输入AT 返回ok;输入AT RST 返回 ok 一长段乱码 ready;输入AT CWMODE=1 返回ok;输入AT CWJAP=”SSID“,”password“ 返回ok。
查看手机热点中出现名为ATK……设备,连接结果。
每个指令运输后都要回车
不能连接到热点就重复AT RST(重启esp)重试
3.2 平台连接主代码
(1)
这个项目用的是Onenet的EDP协议,从官网文档介绍中找到EDP协议服务器地址为183.230.40.39,端口号876。
在使用代码连接网络之前,需要修改地址和端口号。
(2)
net_device.h文件:修改连接热点和密码,使计算机和设备连接热点。
private:
char ssid[20] = "Mi*Amethyst";
char Passward[30] = "pi7z4ffjxpcpnss";
(3)
onenet.h文件:修改api-key和设备id。api-key是产品的Master-APIkey;设备id是设备id。
char devID[15] = "933446881";
char apiKey[35] = "XtTO65Np8aDPWuIntmliikfpMRk=";
4)
onenet.cpp文件:
删去不需要的头文件函数、变量、结构体等。修改需要的头文件、函数及变量。根据需要在云平台显示的数据修改数据传输部分。
sprintf(send_buf,",;wendu,%d;shidu,%d;guangzhao,%d;",wendu,shidu,guangzhao);
在Onenet_App函数里把原本的控制信号数据流改成对应的数据流名称,并且做相应处理,便于程序会在接收到的数据包中找到和控制条件相同的数据流名称并且执行控制命令。
if(strstr((char *)cmd, "temp")) //搜索数据流名称
{
timecnt2=micros();
if(num == 1&==0) //控制数据如果为1,代表开
{
// clockwise(100);
anticlockwise(100);
timecnt2=micros()-timecnt2;
chuanghu=1;
}
else if(num == 0&==1) //控制数据如果为0,代表关
{
//anticlockwise(100);
clockwise(100);
timecnt2=micros()-timecnt2;
chuanghu=0;
}
flag = 1; //标记数据反馈
}
3.3 程序运行问题
上传代码时RX和TX必须悬空,否则上传出错。
烧写完程序后,第一次上电可能可以自动联网,如果不能在手机热点中找到设备,需要先手动配网一次再回来烧写程序。
如果有设备但串口监视器中始终(重复5次以上)出现AT+CWJAP,而不出现"AT+CIPSTART=“TCP”,“183.230.40.33”,80\r\n") 给主控断电后重新上电后(不必重新烧写)再打开串口监视器。
四、onenet平台搭建
1、找到onenet平台并注册账号登录
2、到网页首页找到控制台进入控制台,选择全部产品服务的多协议接入,选择EDP协议并添加产品。
3、按需要添加产品之后按项目需求添加设备(鉴权信息随便输入)
4、添加好之后就是这样的:
五、数据可视化
1、在Onenet全部产品中选择数据可视化
2、在可视化页面选择新建项目
3、选择空白模板,输入项目名称和简介
4、点击编辑
5、在空白界面上方的菜单栏里选择常规图标->仪表盘->选定显示数据所需的图表及数量
6、选中界面的一个仪表盘,在右边页面选择数据,设置成需要的大小
7、在右边的页面选择数据,再数据源选择栏点击管理数据源,然后在弹出的窗口选择新增数据源;点击数据类型的下拉箭头,选择OneNET;输入数据源名称;鉴权方式选择普通鉴权;Key里添加对应项目的Master_key,然后设备和数据流就会出现对应项目的设备名称和数据流名,最后点击创建。
8、重复上面第7步,需要显示几个数据就需要创建几个数据源;然后在数据源管理的下拉箭头里选择对应的数据源.
9、然后选择私有过滤器,并编辑数据过滤器的代码如图。同样操作完成所有仪表盘后,点击界面右上角的保存,保存后选择预览就可以看到全屏效果图。
六、项目总结
6.1 硬件连接情况
6.2 数据传输情况
编译源程序代码,上传Arduino后,情况如下:
Arduino软件串口监视器
Onenet云平台数据接收情况
Onenet数据可视化平台
6.3 硬件效果
水泵
植物补光灯