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

动手体验物联网应用 - 开发挑战全攻略_第1张图片

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

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

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

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

1、青铜篇

任务目标

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

创建工程

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

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

动手体验物联网应用 - 开发挑战全攻略_第2张图片

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

动手体验物联网应用 - 开发挑战全攻略_第3张图片

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

动手体验物联网应用 - 开发挑战全攻略_第4张图片

  

拷贝代码

将以下代码拷贝至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. 点击“烧录”按钮,选择 “本地更新”

动手体验物联网应用 - 开发挑战全攻略_第5张图片 2. 选择设备对应的串口

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

动手体验物联网应用 - 开发挑战全攻略_第6张图片

 

3. 选择串口波特率

对于HaaS EDU K1请选择1500000

动手体验物联网应用 - 开发挑战全攻略_第7张图片

 

4. 重启HaaS EDU K1

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

Please reboot the board manually.

动手体验物联网应用 - 开发挑战全攻略_第8张图片

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

动手体验物联网应用 - 开发挑战全攻略_第9张图片

 

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

动手体验物联网应用 - 开发挑战全攻略_第10张图片

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

动手体验物联网应用 - 开发挑战全攻略_第11张图片

 

运行结果

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

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

动手体验物联网应用 - 开发挑战全攻略_第12张图片

 

青铜篇任务目标达成!

2、白银篇

任务目标

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

  1. 云端配置

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

     2. 设备开发

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

云端配置

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

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

动手体验物联网应用 - 开发挑战全攻略_第13张图片

 

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

     4. 点击 创建产品

动手体验物联网应用 - 开发挑战全攻略_第14张图片    5. 创建产品

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

动手体验物联网应用 - 开发挑战全攻略_第15张图片

 

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

动手体验物联网应用 - 开发挑战全攻略_第16张图片

 

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

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

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

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

6. 创建设备

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

动手体验物联网应用 - 开发挑战全攻略_第17张图片

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

动手体验物联网应用 - 开发挑战全攻略_第18张图片

 

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

动手体验物联网应用 - 开发挑战全攻略_第19张图片

 

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

动手体验物联网应用 - 开发挑战全攻略_第20张图片

 

7. 查看设备属性信息

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

动手体验物联网应用 - 开发挑战全攻略_第21张图片

 

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

  8. 获取三元组

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

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

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

动手体验物联网应用 - 开发挑战全攻略_第22张图片

 

设备开发

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

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

动手体验物联网应用 - 开发挑战全攻略_第23张图片

 

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

                                         白银篇任务目标达成!

3、黄金篇

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

开通 IoT Studio

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

创建项目

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

动手体验物联网应用 - 开发挑战全攻略_第24张图片

动手体验物联网应用 - 开发挑战全攻略_第25张图片 

 

关联产品和设备

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

动手体验物联网应用 - 开发挑战全攻略_第26张图片

动手体验物联网应用 - 开发挑战全攻略_第27张图片 

 

创建移动应用

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

动手体验物联网应用 - 开发挑战全攻略_第28张图片

 

开发移动应用

页面设计

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

动手体验物联网应用 - 开发挑战全攻略_第29张图片

 

数据绑定

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

动手体验物联网应用 - 开发挑战全攻略_第30张图片

 

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

动手体验物联网应用 - 开发挑战全攻略_第31张图片

 

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

动手体验物联网应用 - 开发挑战全攻略_第32张图片

 

预览移动应用

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

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

动手体验物联网应用 - 开发挑战全攻略_第33张图片

 

                         黄金篇任务目标达成!

你可能感兴趣的:(HaaS轻应用,云平台,SaaS,物联网,嵌入式,python)