3189| 0
|
[pinpong 库控制硬件] 【pinpong库控制硬件】之虚谷号-2 |
本帖最后由 _木子_ 于 2020-9-2 10:10 编辑 虚谷号上使用siot ———————————————————————————————————————虚谷号作为一个全功能的迷你电脑,在物联网应用方面即可以作为服务器,也可以作为客户端。MQTT是物联网中最常用的一种协议,越来越受到行业的关注。虚谷号默认安装了基于MQTT的开源服务器SIoT,使其在变得更加方便。 本项目中虚谷号是作为客户端使用的,通过温湿度进行数据的采集,并发送到网页端。当发现温度高达一点温度时,可通过网页端发送控制指令,从而控制风扇的开启和关闭。当然了我们还可以通过显示屏进行实时数据的显示。 2.虚谷号作为MQTT客户端 ——————————————————————————————————————— 2.1虚谷号入手的基础学习 前期的设置和学习如链接: https://mc.dfrobot.com.cn/thread-306300-1-1.html 2.2硬件准备 1、虚谷号*1 2、数据线*1 3、厚物扩展板*1 4、风扇模块*1 5、Dht11温湿度传感器*1 6、3pin线*2 2.3硬件连接 1、厚物扩展板对应针脚插入虚谷号上 2、Dht11温湿度传感器使用3pin线对应厚物扩展板上的6号引脚进行连接(绿红黑依次对应) 3、风扇模块使用3pin线对应厚物扩展板上的9号引脚进行连接(绿红黑依次对应) 4、最后通过usb数据线把电脑的usb口和虚谷号进行连接 2.4软件编程 注意:在编程前需要打开wifi_log.txt即可查看虚谷号当前的IP地址,代码当中需要根据当前的ip地址进行相应的改变。 调用pinpong库在虚谷号上编程,用法如下: import siot #导入siot库 import time #导入时间库 from pinpong.board import Board,Pin,DHT11 #导入dht库 from pinpong.libs.dfrobot_ssd1306 import SSD1306_I2C #导入ssd1306库 Board("xugu").begin() #初始化,选择板型(uno、leonardo、xugu)和端口号 dht11 = DHT11(Pin(Pin.D6)) #初始化dht11引脚 p = Pin(9,Pin.OUT) #初始化风扇引脚 oled=SSD1306_I2C(width=128, height=64) #初始化屏幕,传入屏幕像素点数 SERVER = "192.168.43.168" #MQTT服务器IP,打开wifi_log.txt即可查看虚谷号当前的IP地址,并作相应的修改 CLIENT_ID = "" #在SIoT上,CLIENT_ID可以留空 IOT_pubTopic = 'vvboard/invade' #“topic”为“项目名称/设备名称” IOT_UserName ='scope' #用户名默认为scope IOT_PassWord ='scope' #密码默认为scope siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)#确定输入的用户名和密码正确 def sub_cb(client, userdata, msg): print("\nTopic:" + str(msg.topic) + " Message:" + str(msg.payload)) #在这里可以写当虚谷号收到消息要做的事 global state #将state设置为全局变量 if(int(msg.payload)==1): #注意使用int将值转换为数值型,才可以比较,1为开风扇,0为关闭风扇 state=1 if(int(msg.payload)==0): state=0 siot.connect() siot.set_callback(sub_cb) siot.getsubscribe(IOT_pubTopic) #订阅消息 siot.loop() state=0 #声明变量 while True: INV = dht11.temp_c() #读取 6 引脚的值 p.write_digital(state) #通过变量state来控制led灯的亮灭 siot.publish(IOT_pubTopic, "%d"%INV) #发送消息 oled.text(str(INV),8,8) #指定位置显示文字 oled.text("Is the fan on",8,24) #指定位置显示文字 oled.text(str(state),8,40) #指定位置显示文 oled.show() #显示生效 time.sleep(2) oled.fill(0) #全部填充熄灭,清屏 oled.show() #显示生效 time.sleep(0.5) 2.5运行程序 1、如上图点击对应的单元格,点击运行按钮,即可逐一运行程序(当点击单元格时,单元格会变蓝色) 2、siot的启动及操作 双击启动访问siot的快捷方式,即可进入登录页面。 输入用户名和密码,默认都为scope(和代码中输入一致),登录进入 找到相应的项目,和代码中一致的项目名 2.6代码解析 1、导入需要的库文库,这里导入了siot库、时间库、dht库和ssd1306库。 import siot #导入siot库 import time #导入时间库 from pinpong.board import Board,Pin,DHT11 #导入dht库 from pinpong.libs.dfrobot_ssd1306 import SSD1306_I2C #导入ssd1306库 2、初始化主板及引脚,初始化主板为“xugu”,初始化dht11连接6号引脚,设置风扇的控制引脚为9号引脚,初始oled显示屏。 Board("xugu").begin() #初始化,选择板型(uno、leonardo、xugu)和端口号 dht11 = DHT11(Pin(Pin.D6)) #初始化dht11引脚 p = Pin(9,Pin.OUT) #初始化风扇引脚 oled=SSD1306_I2C(width=128, height=64) #初始化屏幕,传入屏幕像素点数 3、MQTT服务器设置 SERVER = "192.168.43.168" #MQTT服务器IP,打开wifi_log.txt即可查看虚谷号当前的IP地址,并作相应的修改 CLIENT_ID = "" #在SIoT上,CLIENT_ID可以留空 IOT_pubTopic = 'vvboard/invade' #“topic”为“项目名称/设备名称” IOT_UserName ='scope' #用户名默认为scope IOT_PassWord ='scope' #密码默认为scope siot.init(CLIENT_ID, SERVER, user=IOT_UserName, password=IOT_PassWord)#确定输入的用户名和密码正确 4、当虚谷号接收到消息“0”时,设置state为0。当虚谷号接收到消息“1”时,设置state为1。 def sub_cb(client, userdata, msg): print("\nTopic:" + str(msg.topic) + " Message:" + str(msg.payload)) #在这里可以写当虚谷号收到消息要做的事 global state #将state设置为全局变量 if(int(msg.payload)==1): #注意使用int将值转换为数值型,才可以比较,1为开风扇,0为关闭风扇 state=1 if(int(msg.payload)==0): state=0 5、订阅消息 siot.connect() siot.set_callback(sub_cb) siot.getsubscribe(IOT_pubTopic) #订阅消息 siot.loop() 6、声明变量state的初始值为0,循环执行中一直读取6号引脚的数值和通过变量state来控制led灯的亮灭,并把相应的消息发送至网页端。 state=0 #声明变量 while True: INV = dht11.temp_c() #读取 6 引脚的值 p.write_digital(state) #通过变量state来控制led灯的亮灭 siot.publish(IOT_pubTopic, "%d"%INV) #发送消息 7、oled显示的相应设置 oled.text(str(INV),8,8) #指定位置显示文字 oled.text("Is the fan on",8,24) #指定位置显示文字 oled.text(str(state),8,40) #指定位置显示文 oled.show() #显示生效 time.sleep(2) oled.fill(0) #全部填充熄灭,清屏 oled.show() #显示生效 time.sleep(0.5) 3.项目拓展 把更多传感器加入该项目中,尝试制作出一套“物联网”控制系统。 其它项目链接:https://mc.dfrobot.com.cn/thread-306441-1-1.html Pinpong库学习链接:https://pinpong.readthedocs.io/zh_CN/latest/ |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed