labview 将驱动打包到安装文件中_基于Labview与单片机的无线温度采集与控制系统设计设备篇...

a541c9f72a080aa14f8e7cc11c42c09f.png

今天是端午节,祝大家端午节安康

在上篇文章中,只完成了PC端的软件设计,设备端也是采用软件模拟的方式实现的,今天趁着还没出去的时间,来更新一篇硬件-设备端的实现方法。

硬件准备:ESP8266最小系统开发板,一个温度传感器DS18B20,三个LED模拟开关设备的控制。这是我好久之前自己画来玩的板子,硬件实物如下图所示:

a223a1164b692df6b5691e9ca52d657e.png

WIFI部分原理图:

12b1f5b7305cfaff727f2e4f843d63d6.png

目前用到的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)

温度传感器实物和原理图:

46628416135347d70f1f7790ca48aa96.pngb653827c6dae5d2c57e9acd9149c404d.png

硬件端相关的内容已经说完了, 接下来就是软件代码的事了,在写代码之前需要说明一下,这里用的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 烧录并测试

  1. 编写一个main.py文件,然后将上述代码拷贝到里面。

  2. 将串口工具与设备接好,然后接到电脑的USB上。打开文件发送工具,点击发送。

  3. 等待发送成功,板子会自动重启,并打印如下信息,如果我们不提前打开Labview上位机,连不上服务器会异常退出的。这部分目前还没有做相应的处理。

先来张异常的截图

48ea2e16881fbda7338b829cfd0ccf1d.png

正确的打开方式:

先运行上位机,点击开始监听

467664dad33338193bd174ce22aad17c.png

2.发送main.py文件,如果已经发送过了,直接按复位键即可。

93bae53fba35f320d60e0652755291aa.png

效果图如下:

5b5b5671b52d1d8cfce9e3736d1a4006.gif

想要获取这篇文章的所有资料,可回复关键字:labview_esp8266 获取噢~~

在使用上如果碰到有问题的,可以底下留言或后台回复,看到会及时帮你解决的。

PS:想获取更多Labview的书籍,可回复关键字: Labview_书籍 获取。

以上源码仅供学习交流,请勿用于商业用途,转载请注明出处。

书籍仅供学习交流,请勿用于商业用途,如侵犯到您的版权,可联系删除!!


往期回顾

基于Labview与单片机的无线温度采集与控制系统设计
基于Labview与单片机的多通道温度采集系统设计

基于ESP8266与QT的智能家居控制系统设计

QT之智能家居服务器设计


23062f6acbdbfc82e0dbd7c6df1ab8d7.gif原创不易,据说点「在看」会更好看哦~23062f6acbdbfc82e0dbd7c6df1ab8d7.gif

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值