大数跨境
0
0

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

【pinpong库控制硬件】之虚谷号-2 蘑菇云创造
2020-09-01
1

点击上方“蘑菇云创造”可以关注我们哦



虚谷号上使用siot



1.虚谷号和物联网


虚谷号作为一个全功能的迷你电脑,在物联网应用方面即可以作为服务器,也可以作为客户端。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/






蘑菇云创造

扫码|关注我们

微信号|DFRobot2019

入群交流|添加微信





推荐阅读





点击“阅读原文”,了解更多!

【声明】内容源于网络
0
0
蘑菇云创造
蘑菇云是DFRobot旗下专注于AI人工智能、创客、STEAM、劳动教育的科技创新教育品牌;以为中国培养下一代科技创新人才为使命,为学校提供k12全龄段科技创新教育解决方案。
内容 969
粉丝 0
蘑菇云创造 蘑菇云是DFRobot旗下专注于AI人工智能、创客、STEAM、劳动教育的科技创新教育品牌;以为中国培养下一代科技创新人才为使命,为学校提供k12全龄段科技创新教育解决方案。
总阅读1.4k
粉丝0
内容969