_木子_ 发表于 2020-9-1 15:20:54

【pinpong库控制硬件】之虚谷号-2

本帖最后由 _木子_ 于 2020-9-2 10:10 编辑

虚谷号上使用siot
1.虚谷号和物联网
———————————————————————————————————————虚谷号作为一个全功能的迷你电脑,在物联网应用方面即可以作为服务器,也可以作为客户端。MQTT是物联网中最常用的一种协议,越来越受到行业的关注。虚谷号默认安装了基于MQTT的开源服务器SIoT,使其在变得更加方便。
本项目中虚谷号是作为客户端使用的,通过温湿度进行数据的采集,并发送到网页端。当发现温度高达一点温度时,可通过网页端发送控制指令,从而控制风扇的开启和关闭。当然了我们还可以通过显示屏进行实时数据的显示。

https://v.qq.com/x/page/e3146ece1nl.html

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、如上图点击对应的单元格,点击运行按钮,即可逐一运行程序(当点击单元格时,单元格会变蓝色)




https://v.qq.com/x/page/a3145k5r52w.html

2、siot的启动及操作
双击启动访问siot的快捷方式,即可进入登录页面。


输入用户名和密码,默认都为scope(和代码中输入一致),登录进入



找到相应的项目,和代码中一致的项目名




https://v.qq.com/x/page/w3145kibell.html

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/




页: [1]
查看完整版本: 【pinpong库控制硬件】之虚谷号-2