![a541c9f72a080aa14f8e7cc11c42c09f.png](https://i-blog.csdnimg.cn/blog_migrate/ee5f9a69621b3945846ec875cb26c21e.png)
今天是端午节,祝大家端午节安康
在上篇文章中,只完成了PC端的软件设计,设备端也是采用软件模拟的方式实现的,今天趁着还没出去的时间,来更新一篇硬件-设备端的实现方法。硬件准备:ESP8266最小系统开发板,一个温度传感器DS18B20,三个LED模拟开关设备的控制。这是我好久之前自己画来玩的板子,硬件实物如下图所示:
WIFI部分原理图:
目前用到的IO如下所示
p2_led = Pin(2,Pin.OUT)#板载ledp4_airconditioner = Pin(4,Pin.OUT)#空调i/op5_smartsocket = Pin(5,Pin.OUT);#插座IO# 温度传感器接在Pin_12引脚dat = machine.Pin(12)
温度传感器实物和原理图:
硬件端相关的内容已经说完了, 接下来就是软件代码的事了,在写代码之前需要说明一下,这里用的esp8266的固件MiroPython的,所以需要烧写对应的固件,对于不知道怎么烧写固件的同学,可以参考这篇文章。
这里的代码是在该文章的代码基础上进行完善了,增加的功能,就是一个温度采集以及将温度发送到Labview编写的上位机软件中。
1.1 增加温度传感器驱动
这部分的驱动代码,MircoPython官方已经是编写好的,我们只需要直接导入对应的包,即可使用,是非常简单的~~~
需要导入的包代码如下
import onewire, ds18x20 #导入onewire库,导入ds18b20库import machine # 导入machine库
1.2 定义温度传感器引脚并查找设备
# 温度传感器接在Pin_12引脚dat = machine.Pin(12)ds = ds18x20.DS18X20(onewire.OneWire(dat))roms = ds.scan()print('found devices:', roms)
1.3 采集温度并上传到服务器
将采集好的温度,每隔500ms的时间,上送给上位机软件
# 温度采集,打印相关信息,并上传至服务器print('temperatures:', end=' ')ds.convert_temp()time.sleep_ms(500)for rom in roms: print(ds.read_temp(rom), end=' ') #打印采集到的温度 val = int(ds.read_temp(rom) * 10) # 扩大十倍,转化为int型数据 temp_str = 'A' + str(val) + 'B' + '\r\n' #按照制定的协议,打包温度数据 s.send(str(temp_str,'utf8')) #将数据上传到tcp服务器进行显示print()
以上就是增加的温度采集代码。
该项目完整的代码如下所示:
import networkimport socketimport timeimport machinefrom machine import Pinimport onewire, ds18x20 #导入onewire库#定义esp8266 IO口p2_led = Pin(2,Pin.OUT)#板载ledp4_airconditioner = Pin(4,Pin.OUT)#空调i/op5_smartsocket = Pin(5,Pin.OUT);#插座IO# 温度传感器接在Pin_12引脚dat = machine.Pin(12)ds = ds18x20.DS18X20(onewire.OneWire(dat))roms = ds.scan()print('found devices:', roms)#初始化默认值,低电平有效def default_value_init(): p2_led.value(1) p4_airconditioner.value(1) p5_smartsocket.value(1)#定义一些设备操作函数 def led_control(status): p2_led.value(status)def airconditioner_control(status): p4_airconditioner.value(status) def smart_socket_control(status): p5_smartsocket.value(status) #wifi连接函数 def do_connect(): sta_if = network.WLAN(network.STA_IF) sta_if.active(False) if not sta_if.isconnected(): print("connectting to network ...") sta_if.active(True) #sta_if.connect("MERCURY_A3CC","123456789001") sta_if.connect("TP-LINK_FF71","lwy18079431") # 需要修改成自己路由器的wifi名称和密码 while not sta_if.isconnected(): pass if sta_if.isconnected(): print("connect success") print('network config:', sta_if.ifconfig())#tcp客户端连接服务器函数def tcp_connect(host, port): s = socket.socket()#创建一个socket s.connect((host, port))#连接服务器 s.settimeout(0);# 设置为不堵塞接收 s.send("hello i'm Esp8266 Device\r\n")#连接的时候,像服务器发送一串数据 while True: data = None try: data = s.recv(1024)#接收来自服务的数据,最大长度为1024 except Exception as Ex: # 接收超时,这里不对异常进行处理 pass #如果有数据则进行处理,否则延时500ms,上传温度信息 if data: print(str(data,'utf8'))#打印输出收到的函数 if str(data,'utf8') == "light_on": led_control(0)#因为板载的LED是低电平点亮的,所以这里为0 s.send(str(data,'utf8'))#数据原路返回给TCP服务器,TCP服务器收到这串数据后,才会把led的图片设置为开启状态,其他的也是一样的处理 elif str(data,'utf8') == "light_off": led_control(1)#因为板载的LED是低电平点亮的,所以这里为1 s.send(str(data,'utf8'))#数据原路返回给TCP服务器,TCP服务器收到这串数据后,才会把led的图片设置为关闭状态,其他的也是一样的处理 elif str(data,'utf8') == "airconditioner_on": airconditioner_control(0) s.send(str(data,'utf8')) elif str(data,'utf8') == "airconditioner_off": airconditioner_control(1) s.send(str(data,'utf8')) elif str(data,'utf8') == "socket_on": smart_socket_control(0) s.send(str(data,'utf8')) elif str(data,'utf8') == "socket_off": smart_socket_control(1) s.send(str(data,'utf8')) # 温度采集,打印相关信息,并上传至服务器 print('temperatures:', end=' ') ds.convert_temp() time.sleep_ms(500) for rom in roms: print(ds.read_temp(rom), end=' ') #打印采集到的温度 val = int(ds.read_temp(rom) * 10) # 扩大十倍,转化为int型数据 temp_str = 'A' + str(val) + 'B' + '\r\n' #按照制定的协议,打包温度数据 s.send(str(temp_str,'utf8')) #将数据上传到tcp服务器进行显示 print() if __name__ == "__main__": default_value_init() do_connect() tcp_connect("192.168.0.111",8888) # 要修改成自己电脑的IP,注意,电脑和esp8266必须要在同一局域网下面
1.4 烧录并测试
编写一个main.py文件,然后将上述代码拷贝到里面。
将串口工具与设备接好,然后接到电脑的USB上。打开文件发送工具,点击发送。
等待发送成功,板子会自动重启,并打印如下信息,如果我们不提前打开Labview上位机,连不上服务器会异常退出的。这部分目前还没有做相应的处理。
先来张异常的截图
正确的打开方式:
先运行上位机,点击开始监听
2.发送main.py文件,如果已经发送过了,直接按复位键即可。
效果图如下:
想要获取这篇文章的所有资料,可回复关键字:labview_esp8266 获取噢~~
在使用上如果碰到有问题的,可以底下留言或后台回复,看到会及时帮你解决的。
PS:想获取更多Labview的书籍,可回复关键字: Labview_书籍 获取。
以上源码仅供学习交流,请勿用于商业用途,转载请注明出处。
书籍仅供学习交流,请勿用于商业用途,如侵犯到您的版权,可联系删除!!
往期回顾
基于Labview与单片机的无线温度采集与控制系统设计
基于Labview与单片机的多通道温度采集系统设计
基于ESP8266与QT的智能家居控制系统设计
QT之智能家居服务器设计
原创不易,据说点「在看」会更好看哦~