动手体验物联网应用 - 开发挑战全攻略

Posted HaaS技术社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动手体验物联网应用 - 开发挑战全攻略相关的知识,希望对你有一定的参考价值。

 物联网最大的特点就是万物互联,之前独立的传感器都接入了网络,并且在云平台上可以看到数据展示。

今天手把手教开发者搭建一个完整的物联网应用,温湿度传感器数据上云。

本案例硬件基于HaaS EDU K1, 使用Python轻应用进行开发,并且在阿里云物联网平台进行数据展示。

共分三步: 青铜篇 - 白银篇 - 黄金篇 , 一步步来完成这个物联网应用案例。

1、青铜篇

任务目标

创建、编写并推送一个轻应用

创建工程

如下图所示,打开HaaS Studio后,新建一个基于 helloworld 的 Python轻应用。

  1. 点击左侧 H 图标进入 HaaS Studio
  2. 选择 “快速开始”
  3. 选择 “Python轻应用开发”
  4. 点击 “创建项目”

5. 填写自己的 项目名称 工作区路径,硬件选择 haas Edu K1, 解决方案基于 helloworld

6. 生成的文件路径入下:main.py里就是我们要编写的设备端代码

  

拷贝代码

将以下代码拷贝至main.py运行,以下代码将调用 HaaS EDU K1 板载的温度传感器读取温湿度信息,并显示在OLED上。

import iot
import time
import sh1106
import netmgr as nm
from driver import SPI
from driver import GPIO
from si7006 import SI7006

# OLED屏幕
oled = None

def get_temp_humi():
    #print("Testing si7006 ...")
    si7006Dev = SI7006()
    si7006Dev.open("si7006")
    version = si7006Dev.getVer()
    print("si7006 version is: %d" % version)

    chipID = si7006Dev.getID()
    print("si7006 chip id is:", chipID)

    temperature = si7006Dev.getTemperature()
    print("The temperature is: %.1f" % temperature)

    humidity = si7006Dev.getHumidity()
    print("The humidity is: %.1f" % humidity)

    si7006Dev.close()

    return temperature, humidity


def oled_init():
    oled_spi = SPI()
    oled_spi.open("oled_spi")

    oled_res = GPIO()
    oled_res.open("oled_res")

    oled_dc = GPIO()
    oled_dc.open("oled_dc")
    global oled
    oled = sh1106.SH1106_SPI(132, 64, oled_spi, oled_dc, oled_res)

    oled.fill(0)
    oled.text('Net Connecting...', 2, 24, 1)
    oled.show()


def upload_Temperature_and_Humidity():
    global oled

    while True:
        data = get_temp_humi()
        T_str = "Temp: " + str(round(data[0], 2))
        H_str = "Humi: " + str(round(data[1], 2))

        oled.fill(0)
        oled.text(T_str, 10, 2, 1)
        oled.text(H_str, 10, 16, 1)
        oled.show()

        time.sleep(2)

# main.py 入口函数
if __name__ == '__main__':
    oled_init()
    upload_Temperature_and_Humidity()

推送脚本文件

使用现场提供的USB连接线 连接 HaaS EDU K1 到电脑。

推送脚本时需要用到 HaaS Studio 最下方的一排按钮。

  • 快速开始 创建新应用
  • 编译 检查语法并打包代码
  • 烧录 将代码推送到设备
  • 串口 打开连接到设备的串口
  • 清理 清理打包的文件
  • HaaS百事通 开发过程中遇到的问题可以咨询AI机器人 HaaS百事通

推送步骤

  1. 点击“烧录”按钮,选择 “本地更新”

 2. 选择设备对应的串口

注意⚠️  每台设备的串口名称都不一样,请挑战者根据自己开发环境选择合适的串口。

 

3. 选择串口波特率

对于HaaS EDU K1请选择1500000

 

4. 重启HaaS EDU K1

选择完成后,HaaS Studio会与 HaaS EDU K1 建立连接,并提示用户重启设备。

Please reboot the board manually.

此时,按下 HaaS EDU K1 的reset按键,就会自动开始推送。

 

5. 脚本下载过程如下图所示,下载完成后会提示“Ymodem transfer file finish”

6. 更新完成后,会在 .vscode 文件下生成“update.json”文件(如下图所示),文件记录了当前烧录模式及串口配置信息。后续更新操作会使用该文件里面的内容作为配置。如果您的开发环境发生变化(比如更换了一台开发板、将开发板插入电脑另外一个USB口等情况)后,串口ID有可能发生变化,此时可以删除update.json文件再执行上述操作过程,以选择正确的串口。

 

运行结果

推送此脚本到HaaS EDU K1之后,串口会周期性的打印如下日志。

···
si7006 version is: 32 
The temperature is: 52.1 
The humidity is: 19.6
···

 

青铜篇任务目标达成!

2、白银篇

任务目标

配置物联网平台,完成温湿度数据上报。

  1. 云端配置

为了在云端接收设备上报的数据,我们需要在物联网平台创建对应的产品、设备及属性。

     2. 设备开发

使用HaaS轻应用提供的上云能力,完成设备端开发。

云端配置

  1. 打开 物联网平台 https://iot.console.aliyun.com
  2. 对于第一次使用物联网平台的挑战者,需要开通 公共实例

左上角选择“华东2-上海”,点击“公共实例”,即可开通。

 

     3. 打开 公共实例 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

     4. 点击 创建产品

    5. 创建产品

在新建产品设定页面按照下图所示,设定“产品名称”,选择所属的“标准品类”,节点类型选择“直连设备”,联网方式选择“Wi-Fi”,数据格式选择“ICA标准数据格式”,检验类型和认证方式选择默认设定即可。还可以根据开发者自己的需求在“产品描述”页面添加针对此产品的描述。

 

选择之后,点击“确认”按钮,即可完成产品创建。返回“产品”页面之后可以看到产品类表中会出现刚刚创建的“温湿度检测装置”的产品,如下图所示。

 

因为在创建产品的过程中选择了标准的产品品类,这里会出现标准品类中自带的物模型设定,包含“当前温度”、“当前湿度”和“地理位置”信息。这三条都适合属性信息,其标识符、数据类型、数据定义及该属性支持的操作都可以在这个页面看到。

标识符是设备端上报设备属性状态的消息中需要使用的标识符,并且只有在设备上报的属性内容符合“数据定义”中的数据取值范围的时候才会被物联网平台记录,否则会被物联网平台认定为非法属性而过滤掉。

如果在创建产品的时候没有选择标准的品类,则需要在这个地方新增物模型的属性或服务。详情请参考物联网平台中的内容。

产品及其物模型创建完成后就可以创建这个产品的设备了。

6. 创建设备

在产品列表页面中,点击“管理设备”,就会进到设备管理页面。

在“设备”页面点击“添加设备”按钮,如下图所示。

 

在“添加设备”页面中设定“DeviceName”,这里开发者可以自己填入自己想设定的设备名称,也可以不填任何内容让系统自动生成设备名称。

 

设备添加完成后,点击“前往查看”按钮,就可以看到此设备端详细信息了。

 

7. 查看设备属性信息

设备详情信息页中的 “物模型数据” 标签页中可以看到设备的所有属性信息、设备时间上报情况及设备服务调用情况,如下图所示。待物联网设备按照设备属性对应的标识符上报设备属性的时候,本图片中的 “当前温度”“当前湿度” 等属性值就会显示设备最新的属性信息。

 

💡 创建产品和设备的过程是按照面向对象的思想进行设计的,其中创建产品可以看成是新建一个类,其中的物模型则是类的对象,创建产品则是进行类的实例化。

  8. 获取三元组

设备信息中有两个信息需要和设备端开发相匹配:

  • 三元组
  • 物模型属性信息

点击“查看”按钮,就可以看到设备的三元组信息。三元组是物联网设备端和物联网云端设备相关联的唯一标识,在设备端连接云端的时候会使用三元组信息和云端进行鉴权,鉴权通过之后云端会认为设备已激活并上线。

 

设备开发

在本节挑战中,不会提供完整的代码,只提供一些代码碎片,来实现对应的功能,开发者需要将这些碎片插入代码对应的位置。

连接Wi-Fi

在将数据上报至物联网平台之前,开发板首先需要连接至网络。

import time
import netmgr

# 在这里填写 Wi-Fi 信息
wifi_ssid = 'wifi_ssid'
wifi_password = 'wifi_password'

# 连接 Wi-Fi 网络
def get_wifi_status():
    netmgr.init()
    time.sleep(10)
    if(netmgr.getStatus() != 5):
        netmgr.connect(wifi_ssid, wifi_password)
        while netmgr.getStatus() != 5:
            time.sleep(0.5)

    print('DeviceIP:' + nm.getInfo()['IP'])
    print("ConnectWifi Sucess")

# main.py 入口函数
if __name__ == '__main__':
    # 在入口函数中调用以连接到指定 Wi-Fi
    get_wifi_status()

连接物联网平台

在连接至网络后,将使用上文中获取到的设备三元组,将开发板映射到云端刚刚创建的设备。

import iot
import time

# 物联网平台连接标志位
on_connected = False

# 三元组信息
key_info = {
    'region': 'cn-shanghai',
    'productKey': 'xxxxxxxx',
    'deviceName': 'xxxxxxxx',
    'deviceSecret': 'xxxxxxxx',
}

# 物联网设备实例
device = iot.Device(key_info)

# 物联网平台连接成功的回调函数
def on_connect():
    global on_connected
    on_connected = True

# 连接物联网平台
def connect_lk():
    global on_connect, device
    
    device.on('connect', on_connect)
    # 连接物联网平台
    device.connect()
    # 触发linkit sdk持续处理server端信息
    while(True):
        if on_connected:
            print('物联网平台连接成功')
            break
        else:
            time.sleep(1)
    time.sleep(3)
    
# main.py 入口函数
if __name__ == '__main__':
    # 在入口函数中调用以连接到物联网平台
    connect_lk()

上报数据

网络连接完成,物联网平台连接完成,万事俱备,现在我们需要将获取到的温湿度数据进行上报,改写之前的 upload_Temperature_and_Humidity 函数。

def upload_Temperature_and_Humidity():
    # 全局oled对象
    global oled
    # 全局设备对象
    global device

    while True:
        # 读取温湿度数据
        data = get_temp_humi()
        T_str = "Temp: " + str(round(data[0], 2))
        H_str = "Humi: " + str(round(data[1], 2))

        # 显示在oled上
        oled.fill(0)
        oled.text(T_str, 10, 2, 1)
        oled.text(H_str, 10, 16, 1)
        oled.show()

        # 上传数据到物联网平台
        upload_data = {'params': {
            # 注意这里的key需要与物联网平台定义的属性保持一致
            'CurrentTemperature': data[0],
            'CurrentHumidity': data[1]
            }
        }
        device.postProps(upload_data)
        
        # 每隔2秒上报一次
        time.sleep(2)

推动代码到设备

通过青铜篇的你一定知道怎么做

运行结果

HaaS EDU K1启动成功并连接到物联网平台之后,物联网平台上对应的设备状态会从”未激活状态“变为”上线“,在物模型数据标签页上会显示设备上报到物联网平台的属性值。

 

此时如果开发板温度和周围湿度发生变化,物联网平台的物模型数据会更新为设备上报的最新的属性值。

                                         白银篇任务目标达成!

3、黄金篇

任务目标:使用 IoT Studio 开发一款移动应用,远程实时检测温湿度。

开通 IoT Studio

对于第一次使用 IoT Studio 的挑战者,需要开通 IoT Studio。 点击 IoT Studio 官网物联网应用开发-覆盖物联网行业应用场景,加速物联网SaaS构建-阿里云)免费开通。

创建项目

打开 IoT Studio 工作台(https://studio.iot.aliyun.com),在项目管理中创建一个普通项目,如下图所示,将此项目命名为“温湿度计”。

 

 

关联产品和设备

为了让 IoT Studio 项目能够访问到我们创建的物联网产品及设备,我们需要在 项目主页 进行关联。

 

 

创建移动应用

回到项目主页,选择 移动应用创建

 

开发移动应用

页面设计

这一小节将不会有具体的攻略,挑战者可以使用 IoT Studio 丰富的组件来自行构建应用页面,推荐挑战者尝试各种不同的表达方式。

 

数据绑定

为了让组件显示我们需要的数据,我们需要对组件进行数据绑定。这里演示如何对 文字 组件进行数据绑定。点击文字组件,会出现 “样式” 侧边栏。我们需要更改文字的内容为显示的温度,因此我们在文字后点击“配置数据源”

 

这里就会使用到我们刚刚在项目中进行关联的设备和产品。我们依次配置想要显示的产品、设备和属性,点击确定完成配置。

 

配置成功后,组件即可显示配置的数据。其他组件的配置方法大同小异。

 

预览移动应用

最后,我们需要把创作的界面显示在手机上,点击右上角 “预览” 即可获取预览二维码。

打开 “支付宝”, 搜索 “HaaS”小程序” ,点击右下方 “IoT Studio” 扫码预览,即可查看运行效果!

 

                         黄金篇任务目标达成!

以上是关于动手体验物联网应用 - 开发挑战全攻略的主要内容,如果未能解决你的问题,请参考以下文章

区块链技术应用开发应用物联网要克服的挑战

Thread 应用实例之 YarN 物联网开发套件

大牛“稿事” | 物联网业务如何应用领域驱动设计?

猿创征文|不会代码也能玩开发?基于华为云 IoT 快速实现 0 代码体验物联网设备上云

猿创征文|不会代码也能玩开发?基于华为云 IoT 快速实现 0 代码体验物联网设备上云

MediaTek携手Microsoft 给开发者更好的物联网体验