Microsoft PowerPoint - TinyLink课件.pptx

Similar documents
AN INTRODUCTION TO PHYSICAL COMPUTING USING ARDUINO, GRASSHOPPER, AND FIREFLY (CHINESE EDITION ) INTERACTIVE PROTOTYPING

下 图 是 连 接 的 方 法 在 这 篇 文 章 里 还 会 介 绍 如 何 建 立 大 量 的 进 程 无 线 节 点, 如 何 将 这 些 传 感 器 集 成 到 一 个 开 源 家 庨 自 劢 化 服 务 器 除 了 在 手 机 App 上 看 到 家 里 的 情 形 外, 你 还 可 以

C语言的应用.PDF

ESP-Jumpstart

Contents Viewpoint Application Story 05 News & Events 06 Technology Forum Customer Partnership Cover Story Advisory Board Inside Advantech Beautiful L

概述

册子0906

MICROCHIP EVM Board : APP APP001 PICmicro Microchip APP001 40pin PDIP PICmicro Design Tips Character LCM Temperature Sensor Application I/O Pi

概述

F515_CS_Book.book

冷熱衝擊試驗機、溫度控制器

an153f

Ch03_嵌入式作業系統建置_01

Microsoft Word - InoTouch Editor编程软件手册 doc

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

Measurement Studio Expands Your Test and Measurement Programming Power

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

instructions.PDF

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0

<4D F736F F D FB971BEF7BB50B971A46CB8735FB773A55FA5ABA5DFB7E7AADAB0AAAFC5A475B77EC2BEB77EBEC7AED55FA97EAE61C0F4B9D2B4BCBC7AB1B1A8EEA874B2CE2E646F63>

1 TPIS TPIS 2 2

Microsoft Word zw

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

快 速 搜 索 关 键 词 PDF 电 子 文 档 可 以 使 用 查 找 功 能 搜 索 关 键 词 例 如 在 Adobe Reader 中,Windows 用 户 使 用 快 捷 键 Ctrl+F,Mac 用 户 使 用 Command+F 即 可 搜 索 关 键 词 点 击 目 录 转 跳

Microsoft PowerPoint - BECKHOFF技术_ADS通讯 [Compatibility Mode]

Bus Hound 5

X713_CS_Book.book

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

epub83-1

一个开放源码的嵌入式仿真环境 ― SkyEye

ICD ICD ICD ICD ICD

Microsoft Word - 实用案例.doc

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

舟山市人民政府办公室文件

IC-900W Wireless Pan & Tilt Wireless Pan & Tilt Remote Control / Night Vision FCC ID:RUJ-LR802UWG

Application Note Format

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

Microsoft PowerPoint - 物聯網_1012_ch14 [相容模式]

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

C/C++ - 字符输入输出和字符确认

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2

audiogram3 Owners Manual

untitled

穨2700使用手冊.doc

4 经 过 设 置 后,Zeppelin Air 无 法 连 接 到 我 的 网 络, 我 该 如 何 解 决 这 个 问 题? 下 载 并 安 装 最 新 的 固 件, 可 以 通 过 下 面 的 问 题 编 号 17 下 载 确 保 从 Apple App Store( 适 用 于 Mac ip

华恒家庭网关方案

Office Office Office Microsoft Word Office Office Azure Office One Drive 2 app 3 : [5] 3, :, [6]; [5], ; [8], [1], ICTCLAS(Institute of Computing Tech

EK-STM32F

大学计算机基础B.doc

Abstract arm linux tool-chain root NET-Start! 2

G30

Chapter #

CC213

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD

微雪电子 Open407V-D 实验手册 Open407V-D 实验手册 目录 准备工作... 2 ADC+DMA... 2 CAN1 TO CAN2-Normal... 3 DCMI_OV DCMI_OV I2C... 6 L

RS-232C [11-13] 1 1 (PLC) (HMI) Visual Basic (PLC) 402

Copyright 2007 Hewlett-Packard Development Company, L.P. Microsoft 和 Windows 是 Microsoft Corporation 在 美 国 的 注 册 商 标 Bluetooth 是 其 所 有 者 拥 有 的 商 标,Hew

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2

IP Camera

Special_topics_appdesigner_

C/C++ - 文件IO

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

CHAPTER 1

C/C++程序设计 - 字符串与格式化输入/输出

Microsoft Word - 宏正95年報.doc

<4D F736F F D20C7B6C8EBCABDCAB5D1E9CAD2B7BDB0B82E646F63>

Microsoft Word - PS2_linux_guide_cn.doc

本实验需要用到两个特征值, 两个特征值的属性各不相同, 我们同样在 SimpleGATTProfile 中新建即可, 接下来就开始吧 新建特征值表 : 表 3.3 串口透传特征值属性 长度 属性 UUID 功能 (byte) SIMPLEPROFILE_CHA R6 15 可读可写 FFF6 服务器

AL-M200 Series

1. Scratch的簡介

<4D F736F F D20D5FEB8AEB9A4D7F7B1A8B8E62E646F63>

目 錄 壹 實 務 專 題 製 作 競 賽 ( 複 賽 ) 實 施 計 畫 1 貳 實 務 專 題 製 作 競 賽 ( 複 賽 ) 參 選 作 品 一 覽 表 13 參 評 審 委 員 名 單 23 肆 活 動 照 片 25 伍 實 務 專 題 製 作 競 賽 ( 複 賽 ) 優 良 作 品 名 錄

SDP

51 C 51 isp 10 C PCB C C C C KEIL

Microsoft Word - CX1000-HMI_程序开发_PLC通讯

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

WebEx 一键集成 1 文档目的 Web 集成 URL API 语法 启会 加会 调用 移动集成 wbx schema 调用 取得 sessionticket...4

Microsoft Word - 正文.doc

書 籍 導 讀 遊 戲 活 動 第 五 項 修 練 啤 酒 遊 戲 經 歷 過 一 系 列 的 電 影 欣 賞 後, 透 過 書 中 對 常 見 9 個 系 統 基 模 做 討 論 以 期 在 未 來 工 作 上 遇 到 問 題 時, 可 以 透 過 團 隊 的 系 統 思 考, 找 出 根 本 解

KL DSC DEMO 使用说明

SAPIDO GR-1733 無線寬頻分享器


第0课-初识Arduino

CL-S10w

Microsoft PowerPoint - 01_Introduction.ppt

PaPaGO! PaPaGO! PaPaGO! PaPaGO! PaPaGO! PaPaGO!

Junos Pulse Mobile Security R1 2012, Juniper Networks, Inc.

MCU DSP MSO MCU DSP MSO MSO MSO MCU/DSP I/O MSO 16 Microchip IC18 turn-on MSO chirp MCU I/O I 2 C

Microsoft Word - 小心翼翼的二十一點N.doc

Data Management Software CL-S10w


Untitled-2.indd

PIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-

Arduino 1-1 Arduino 1-2 Arduino 1-3 Arduino IDE

<4D F736F F D20F7E8F7EBD7F9C3D4C4E3BFAAB7A2B0E5D3B2BCFECAB9D3C3CAD6B2E156312E302E646F6378>

Transcription:

第四章 基于 TinyLink 的 软硬件一体开发 董玮 浙江大学

目录 概述 使用 TinyLink 开发案例 实现机理 远程实验室 相关研究进展 总结与未来工作

传统物联网应用开发 编程模式 : 自底向上 1. 根据应用需求, 构思应用程序的功能 2. 选择满足需求的开发板 外设和扩展板, 设计与之相对 应的硬件连接图, 并组装硬件平台 3. 开发物联网应用程序, 并将外设管脚连接信息写入程序 4. 交叉编译物联网应用程序, 得到二进制文件 5. 将二进制文件烧录至开发板 6. 观察应用运行结果并调试程序, 若修改则返回步骤 3

案例回顾 : 室内环境监测 确定物联网节点所需功能 :PM25 温度和光照 根据功能确定硬件选型 : Arduino+SDS018+Light+DHT11, 根据硬件连接特点, 组装硬件平台 基于 Arduino 编程环境, 进行软件编程 Arduino UNO I/O 扩展板 PM2.5 传感器 光照传感器 温湿度传感器 硬件组装图

案例回顾 : 室内环境监测 确定物联网节点所需功能 :PM25 温度和光照 根据功能确定硬件选型 : Arduino+SDS018+Light+DHT11, 根据硬件连接特点, 组装硬件平台 基于 Arduino 编程环境, 进行软件编程 SDS018 [5V] UART, Pin (D14, D15) 扩展板 Base Shield Grove Light Sensor [3.3V, 5V] Analog, Port (A0, A1) Grove Temperature and Humidity Sensor [3.3V, 5V] Digital, Port (D2, D3) 开发板 Arduino UNO

案例回顾 : 室内环境监测 打开 Arduino IDE, 编写应用程序代码 #include "DHT.h DHT dht(2, DHT11); // 温湿度传感器数据引脚接开发板 2 号引脚 SoftwareSerial SDS018_Serial(14, 15); // PM2.5 传感器连接开发板 (14,15) 引脚 void setup() { Serial.begin(9600); // 串口初始化, 串口打印波特率为 9600 SDS018_Serial.begin(9600); //PM2.5 传感器初始化 dht.begin(); } void loop() { float h = dht.readhumidity(); float t = dht.readtemperature(); float l = analogread(a0); float p = pm25read(); // 读取 DHT11 传感器的温度和湿度数据 // 光照传感器数据引脚接开发板 A0 号引脚 // 读取 PM2.5 传感器数据 } Serial.println("Humidity: " + h); Serial.print("Temperature: " + t); Serial.print("Light: " + l); Serial.print("PM25: " + p); delay(3000); // 每间隔 3 秒打印一次环境数据

案例回顾 : 室内环境监测 PM2.5 传感器需要自行封装读取函数 void pm25read() { while(sds018_serial.available()){ readserialdatafromsds018(); fetchpm25datafromserialdata(); checkcrc(); } storepm25datatobuffer(); return movingaverageofpm25buffer(); } // PM2.5 传感器读取函数实现 // 从 SDS018 读取串口数据 // 从串口数据中提取 PM2.5 数据 // 传输数据 crc 校验 // 将 PM25 数据放入数据缓冲区 // 从数据缓冲区取滑动平均值返回

传统方式不便之处 硬件设计方面 需要专家知识, 选择满足应用需求的硬件列表 设计连接关系, 保证连接正确且可用 当需求发生改变时, 原硬件配置可能因开发板更换而全部推到重来 软件设计方面 需要对开发板 GPIO 须有深入了解, 在代码中使用相应的函数操作 GPIO, 且要与硬件连接关系匹配 需要手动寻找已有库文件和驱动, 有时需要自行手动封装库文件 不同厂商的开发板有各自的开发接口 库和 IDE, 同一份应用换一个硬件平台时, 大多需要重新编写应用程序

顶向下TinyLink 系统 http://tinylink.emnets.org 应用需求分析 节点软件编程 硬件平台搭建 void setup() { TL_WiFi.init(); TL_WiFi.join("SSID", "PASSWORD"); TL_Light.setMeasuringRange(1, 30000, "LUX"); } void loop() { TL_Light.read(); TL_Soil_Humidity.read(); } 自分析用户代码 G. Guan, W. Dong*, et. al, TinyLink: a Holistic System for Rapid Development of IoT Applications, ACM MobiCom 2017.

目录 概述 使用 TinyLink 开发案例 实现机理 远程实验室 相关研究进展 总结与未来工作

TinyLink 关键流程 用户端 服务器端 1 编写程序代码 2 上传到云端 TinyLink 系统 4 组装物联网平台 5 程序代码烧入开发板 3 得到输出 ( 硬件配置文件 ) 3 得到输出 ( 二进制程序 ) 硬件生成系统 软件生成系统

准备1 下载TinyLink客户端并注册 http://tinylink.emnets.org TinyLink网页 TinyLink客户端

准备 2: 阅读 TinyLink 文档 TinyLink 用户手册 TinyLink API 文档

步骤 1: 编写程序代码 本地文本编辑器编写室内环境监测程序 void setup() { TL_Serial.begin(9600); // 初始化串口, 波特率为 9600 } void loop() { TL_PM25.read(); TL_Temperature.read(); TL_Humidity.read(); TL_Light.read(); // 读取各传感器 } /* 打印各传感器数据 */ TL_Serial.println(String("Temperature data is ") + TL_Temperature.data()); TL_Serial.println(String("Humidity data is ") + TL_Humidity.data()); TL_Serial.println(String("Ligh: ") + TL_Light.data()); TL_Serial.println(String("PM25 data is ") + TL_PM25.data()); TL_Time.delayMillis(1000); // 每间隔 3 秒打印一次环境数据

步骤 2: 上传代码并编译 选择待上传文件 提交上传文件 生成硬件及代码编译的结果 具体信息

步骤 3: 获取硬件配置 硬件列表 类型名称功能链接 开发板 扩展板 Arduino MEGA 2560 Mega Shield 外设 Grove Light Sensor TL_Light 外设 Grove Temperature and Humidity Sensor TL_Temperature TL_Humidity https://detail.tmall.com/item.htm?spm=a 230r.1.14.1.4c7b5c9dRzIn7c&id=38816 270178&cm_id=140105335569ed55e27 b&abbucket=3 https://detail.tmall.com/item.htm?spm=a 230r.1.14.8.46f914famJ2fgU&id=56045 9071060&cm_id=140105335569ed55e2 7b&abbucket=3 https://item.taobao.com/item.htm?spm= a1z10.3-c-s.w4002-17798475645.11.6e2933dbzzbczv&id =544373791068 https://item.taobao.com/item.htm?spm= a1z09.2.0.0.310a2e8daj51zn&id=5200 59997040&_u=k1pckkov703e 外设 SDS018 TL_PM25 https://item.taobao.com/item.htm?spm= a1z09.2.0.0.3ff52e8d5fmswv&id=530 210699388&_u=k1pckkov4fa7

步骤 3: 获取硬件配置 硬件列表 硬件连接图 SDS018 [5V] UART, Pin (D14, D15) 扩展板 Mega Shield Grove Light Sensor [3.3V, 5V] Analog, Port (A0, A1) Grove Temperature and Humidity Sensor [3.3V, 5V] Digital, Port (D2, D3) 开发板 Arduino Mega2560

步骤 4: 组装物联网平台 购买硬件列表中的硬件 按照硬件连接示意图组装硬件平台 硬件连接示意图 物联网平台图 SDS018 [5V] UART, Pin (D14, D15) 扩展板 Mega Shield Grove Light Sensor [3.3V, 5V] Analog, Port (A0, A1) Grove Temperature and Humidity Sensor [3.3V, 5V] Digital, Port (D2, D3) 开发板 Arduino Mega2560 购买硬件并组装

步骤 5: 烧录应用程序 硬件平台通过 USB 线连接电脑 点击 TinyLink 客户端一键烧写按钮即可

特点小结 开发模式转变 : 自顶向下 vs 自底向上 自动 : 自动生成硬件配置和二进制代码 自动接入物联网平台, 如 IBM Waston IoT, OneNet 并能优化指定目标, 如价格 功耗 简单 : TinyLink 编程简单 (Arduino setup/loop, TinyLink APIs) 云编译 : 不需要复杂的本地编译环境 客户端 Arduino IDE + LinkIt One 包 树莓派交叉编译链 BBB 交叉编译链 TinyLink 客户端 大小 420 MB 266 MB 302 MB 69 MB 20

功能描述 TinyLink 主页面 注册 登陆 硬件配置 一键烧录 串口调试 硬件推荐 功能 连接图 编译等具体信息

功能描述 查看节点 注册新节点 已注册节点信息及可选操作

功能描述 查看节点数据 选择节点 节点数据展示

功能描述 查看文档 用户手册 API 文档设备列表消息指令映射表

推荐系统 为用户推荐可实现相同功能的不同硬件平台 上述例子, 选择 LinkIt One 平台后, 推荐了 34 种不同可行硬件方案, 其中 TinyLink 目前可支持编译的有 8 种

功能描述 支持设备列表 Temperature and Humidity Sensor Pro (DHT22) Arduino UNO/Mega2560/DUE Temperature and Humidity Sensor (DHT11) 开发板 LinkIt One/Smart 7688 树莓派 2/3 BeagleBone Black Mbed Grove UART WiFi Grove GPS Air Quality SDS018 MK3060 Sound Sensor 扩展板 Grove Base Shield Grove WiFi Shield Grove SD Shield GrovePi+ 传感器 Grove Dust Sensor Loudness Sensor Grove BLE Grove IMU 9DOF Grove Digital Light Sensor Grove IMU 10DOF Grove Temperature Sensor Grove 3-Axis Analog Accelerometer Grove 3-Axis Digital Compass Grove 3-Axis Digital Gyro Grove Light Sensor

API 文档 System library String Module: 字符串模块 Serial Module: 串口模块 begin(): 打开串口 end(): 关闭串口 available(): 判断串口缓冲区是否有数据 read(): 读取串口缓冲区数据 print(): 往串口打印字符数据, 无结尾 println(): 往串口打印字符数据, 加 \n 结尾 Time Module: 时间模块 millisfromstart(): 从系统开始时的系统运行时间, 单位为 ms microsfromstart(): 从系统开始时的系统运行时间, 单位为 us delaymillis(): 程序暂停运行一段指定的时间, 单位为 ms delaymicros() : 程序暂停运行一段指定的时间, 单位为 us

API 文档 System library Timer Module: 定时器模块 start(): 开启定时器 stop(): 关闭定时器 attachinterrupt(): 将回调函数附加到定时器上 detachinterrupt(): 将回调函数从定时器上分离 setperiod(): 设置定时器周期 setfrequency(): 设置定时器频率 Storage Module: 存储器模块 begin(): 开启存储器模块 open(): 打开存储器模块上指定的文件 exists(): 判断文件是否在存储器上 mkdir(): 在存储器上新建文件夹 remove(): 将文件从存储器上删除 rmdir(): 将文件夹从存储器上删除

API 文档 System library File Module: 文件模块 close(): 关闭文件 read(): 从文件读取字符 write(): 将字符或字符串数据写入文件 ( 实际写入缓冲区 ) flush(): 将文件缓冲区数据写入文件 position(): 获取当前文件指针所在位置 seek(): 将文件指针按照指定偏移定位到文件某位置 size(): 获取文件大小

API 文档 Communication library WiFi Module:WiFi 模块 init(): 初始化 WiFi join(): 根据用户名和密码连接 WiFi AP disjoin(): 从 AP 断开连接 fetchhttp(): 从当前 WiFi 连接获取 HTTP 客户端 fetchmqtt(): 从当前 WiFi 连接获取 MQTT 客户端 fetchcsi(): 从当前 WiFi 获取 CSI 数据 HTTP module:http 模块 get(): 发起 HTTP GET 请求 post(): 发起 HTTP POST 请求 CSI module:csi 模块 collect(): 采集 CSI 数据 state(): 获取 CSI 数据

API 文档 Communication library MQTT module:mqtt 模块 connnect(): 连接 MQTT Broker reconnect(): 重连 MQTT Broker disconnect(): 断开 MQTT Broker isconnected(): 判断 MQTT 客户端是否处于连接状态 publish(): 向指定 Topic 发布消息 subscribe(): 订阅 Topic unsubscribe(): 取消订阅 Topic yield(): 收取订阅 Topic 的消息 Bluetooth Module: 蓝牙模块 init(): 初始化蓝牙 send(): 往蓝牙发送数据 recv(): 获取蓝牙数据

API 文档 Sensing library PM25 Module:PM2.5 模块 read(): 读取 PM2.5 传感器 data(): 获取数据 Humidity Module read(): 读取湿度传感器 data(): 获取数据 Temperature Module read(): 读取温度传感器 data(): 获取数据 Soil_Humidity Module read(): 读取土壤湿度传感器 data(): 获取数据

API 文档 Control library Led Module: 板载 LED 模块 turnon(): 点亮板载 LED turnoff(): 熄灭板载 LED toggle(): 让板载 LED 按照指定间隔闪烁 state(): 获取板载 LED 状态信息 Relay Module: 继电器模块 turnon(): 打开继电器 turnoff(): 关闭继电器 state(): 读取继电器状态信息 Motor Module: 电机模块 turnon(): 打开电机 turnoff(): 关闭电机 state(): 读取电机状态信息

目录 概述 使用 TinyLink 开发案例 实现机理 远程实验室 相关研究进展 总结与未来工作

开发案例 SerialEcho: 接收用户串口输入数据并输出到串口 在 PC 端使用 TinyLink 串口调试工具输入 "hello world" Arduino 收到字符串后, 输出 "hello world" 到串口 void setup() { TL_Serial.begin(9600); } void loop() { int flag = 0; while (TL_Serial.available()) { flag = 1; int ch = TL_Serial.read(); TL_Serial.print(ch); } if (flag) { TL_Serial.println(""); } } // 初始化串口 // 检查串口是否有输入数据 // 读取一个字节的输入数据 // 打印收到的字符

开发案例 新型智能手环原型 每隔 1 秒, 感知设备周围环境的温度 PM2.5 浓度和设备三轴加速度, 并将数据打印 void setup() { TL_Serial.begin(9600); } void loop() { TL_Temperature.read(); TL_PM25.read(); TL_Accelerometer.read(); // 读取光照传感器 // 读取 PM2.5 传感器 // 读取加速度传感器 } TL_Serial.print(String( Temp: ) + TL_Temperature.data()); // 打印光照传感器数据 TL_Serial.println(String( PM2.5 ) + TL_PM25.data()); // 打印 PM2.5 传感器数据 /* 分别打印加速度传感器 x 轴 y 轴和 z 轴数据 */ TL_Serial.println(String( ACC_X ) + TL_Accelerometer.data_y()); TL_Serial.println(TL_Accelerometer.data_y()); TL_Serial.println(TL_Accelerometer.data_y()); TL_Time.delayMillis(1000);

开发案例 LED 氛围灯 假设 220V 灯泡连接着继电器, 通过控制继电器开关, 让 220V 灯泡亮 2 秒钟 暗 2 秒钟, 接连反复 void setup() { TL_Serial.begin(9600); } void loop() { TL_Relay.turnOn(); TL_Time.delayMillis(2000); TL_Relay.turnOff(); TL_Time.delayMillis(2000); } // 继电器开, 打开连接电器的电源 // 继电器关, 关闭连接电器的电源

开发案例 文件读取 初始化设备上存储模块, 打开 1.txt, 读取 1 个字符, 再连续读取 10 字符并存入字符串, 最后关闭文件 void setup() { TL_Serial.begin(9600); TL_Storage.begin(); TL_File fp = TL_Storage.open( 1.txt, r ); if(!fp) { TL_Serial.println("Opening the 1.txt fails"); return; } char comingbyte = fp.read(); TL_Serial.print("Reading byte is "); TL_Serial.println(comingByte); char buf[10]; fp.read(buf, 10); TL_Serial.print("Reading bytes are "); TL_Serial.println(buf); fp.close(); } void loop() {} // 初始化文件存储模块 // 打开文件 // 从文件读取一个字符 // 从文件读取一串 10 个字符 // 关闭文件

开发案例 定时器 通过设置定时器并开启, 每隔 1 秒钟调用回调函数,10 秒后关闭定时器, 最终输出 0-9 这 10 个数字 int i = 0; void callback() { TL_Serial.println(String(i++)); } void setup() { TL_Serial.begin(9600); TL_Timer.setPeriod(1000, TIMER_PERIODIC); // 设置周期性定时器, 间隔为 1s TL_Timer.attachInterrupt(callback); // 将回调函数和定时器连接 TL_Timer.start(); // 定时器启动 TL_Time.delayMillis(10000); TL_Timer.stop(); // 定时器关闭 } void loop() { }

开发案例 室内温湿度上传 (HTTP 版 ) 连接 WiFi 后, 每隔 2 秒读取温湿度数据, 通过 HTTP Post 请求将温湿度数据发送到指定 URL String url("http://10.214.149.119/tinylink/receivedata.php"); TL_HTTP http; // 声明 HTTP 客户端 void setup() { TL_WiFi.init(); // 开启 WiFi 并初始化 TL_WiFi.join( SSID, PassW ); // 用 SSID 和密码连接 WiFi http = TL_WiFi.fetchHTTP(); // 从 WiFi 功能获取 HTTP 客户端 } void loop() { TL_Temperature.read(); TL_Humidity.read(); /* 发送 HTTP POST 请求到指定 URL */ http.post(url, String("userid=UserID")+"&"+"nodeid=NodeID"+"&"+"temperature=" + String(TL_Temperature.data()) + "&" + "humidity=" + String(TL_Humidity.data())); TL_Time.delayMillis(2000); }

开发案例 室内温湿度上传 (MQTT 版 ) 连接 WiFi 后, 通过和 MQTT Broker 建立连接 每隔 2 秒读取温湿度并将数据发布到指定 MQTT Topic 中 2 1 topic 3 MQTT 通讯流程 多用户 MQTT 连接场景示例

开发案例 室内温湿度上传 (MQTT 版 ) 连接 WiFi 后, 通过和 MQTT Broker 建立连接 每隔 2 秒读取温湿度并将数据发布到指定 MQTT Topic 中 TL_MQTT mqtt; // 声明 MQTT 客户端 /* MQTT Broker 参数 */ char servername[] = "10.214.149.119"; char clientname[] = "username"; char topicname[] = "10001@wt"; char username[] = "username"; char password[] = "pass"; void setup() { TL_WiFi.init(); bool b = TL_WiFi.join("SSID","Pass"); /* 从 WiFi 连接实例化 MQTT 客户端 */ mqtt = TL_WiFi.fetchMQTT(); /* MQTT 客户端连接 MQTT Broker */ int a = mqtt.connect(servername, 1883, clientname, username, password); } void loop() { TL_Light.read(); TL_Soil_Humidity.read(); TL_Temperature.read(); String data = String("{") + "\"Light\":" + TL_Light.data(); data += ",\"Soil_Humidity\":" + TL_Soil_Humidity.data(); data += ",\"Temperature\":" + TL_Temperature.data() + "}"; char buf[100]; data.tochararray( buf, 100 ); /* MQTT 客户端向 Topic 发布消息 */ int res = mqtt.publish(topicname, buf, strlen(buf)); TL_Time.delayMillis(2000); }

开发案例 Anti_theft 以 100Hz 频率读取加速度传感器, 每秒计算加速度数据方差, 判断节点是否被盗 若被盗则亮灯通知用户 int counter = 0; int buffer[100]; void callback() { /* 获取加速度传感器 X 轴数据并记录 */ TL_Accelerometer.read(); buffer[counter++] = TL_Accelerometer.data_x(); if (counter == 99) { counter = 0; int sum = 0, var = 0; for (int i = 0; i < 100; i++) { // 计算数据和 sum += buffer[i]; } for (int i = 0; i < 100; i++) { // 计算方差 int diff = buffer[i] - sum / 100; var += diff * diff; } } } if (var > 4 * 100) { // 发现节点被盗 TL_LED.turnOn(); TL_Serial.println("Stolen"); TL_Timer.stop(); // 定时器关闭 } void setup() { TL_Serial.begin(9600); /* 设置周期性定时器, 间隔为 10ms */ TL_Timer.setPeriod(10, TIMER_PERIODIC); TL_Timer.attachInterrupt(callback); TL_Timer.start(); // 定时器启动 } void loop() { }

调试 基础调试 用户在代码中编写 #REQUIRE DBGPrint; IoT 平台一定会引入额外的 UART 接口来打印所有的调试信息 交互式调试 用户在代码中编写 #REQUIRE DBG; 如果开发板原生系统支持交互式调试, 那么该开发板可以被选入硬件平台 树莓派和 Beaglebone 平台会利用 gdb 调试 同时 TinyLink 会提供项目源代码供用户深入调试

目录 概述 使用 TinyLink 开发案例 实现机理 远程实验室 相关研究进展 总结与未来工作

46 挑战 1 为满足应用需求, 如何选择最合适的硬件? 如何选择一系列商品化模块并确保相互兼容?

47 用户需求功能 应用代码 void upload() { int light = TL_Light.data(); int sm = TL_Soil_Moisture.data(); String url = "http://localhost/upload.php?"; url += String("light=") + String(light); url += String("&sh=") + String(sm); TL_WiFi.get(url); } void setup() { TL_WiFi.init(); TL_WiFi.join("SSID", "PASSWORD"); } void loop() { TL_Light.read(); TL_Soil_Moisture.read(); upload(); } 光照 WiFi 土壤湿度

48 用户约束条件 所有包含 WiFi 功能的模块总数量应该大于 1 含有 WiFi 功能的模块有如下三种 主板 LinkIt One 扩展板 WiFi Shield V2.0 外设 Grove UART WiFi

49 接口约束条件 对 {Analog, UART, I2C, SPI, USB, } 中每一类型的接口 提供 Port 的数量 主板 扩展板 外设 消耗 Port 的数量 主板 扩展板 外设

问题规约 在 { 主板 扩展板 外设 } 里找到一组子集 优化目标 价格最小化 用户约束条件 硬件约束条件 满足用户需求保证硬件选型是正确有效的 通常生成 210 条约束条件 该问题为经典的线性规划问题 使用经典的线性规划求解器 lp_solver 进行求解 50

51 挑战 2 如何通过硬件无关的方式表达应用程序逻辑? 如何将上述表达转变成可执行代码并在相应的 硬件配置上执行?

硬件配置头文件 硬件无关 用户代码 硬件相关 驱动和库文件

硬件配置头文件 硬件无关 用户代码 硬件相关 硬件配置 硬件配置头文件 驱动和库文件

TinyLink API 从 116 个网上公开的 IoT 项目中提取出 225 个常用的 API 按照功能种类将其分组 实现 24 种类别的 API 包括 LED, 温湿度, 显示,WiFi 等等 项目 API 10.22 % 利用 TinyLink API 实现的项目 [ 值 ]% 89.78 % Covered Uncovered [ 值 ]% Supported Unsupported

目录 概述 使用 TinyLink 开发案例 实现机理 远程实验室 相关研究进展 总结与未来工作

TinyLink 开发存在的问题 开发者需要自行购买 组装硬件

udevice Center udevice Center 是阿里云 IoT 部门推出的 IoT 在线设备平台, 将 IoT 设备部署在远程, 开发者无需购买设备, 即可实现物联网应用的开发 udc 目前支持的开发板 开发板型号 Arduino Mega 2560 树莓派 3B 乐鑫 -esp32-devkitc 乐鑫 -esp8266 庆科 -MK3060 庆科 -EML3047 STM-stm32l432kc-nucleo

udevice Center 系统架构及特点 灵活可扩展的系统架构 IoT 设备通过 udc 客户端连接到 udc 服务器, 设备部署不受地域限制 简易的开发环境配置系统与 Visual Studio Code 深度集成, 通过 Visual Studio Code 的插件为开发者提供服务

TinyLink+uDevice Center

TinyLink+uDevice Center 对于 TinyLink: 1. 使用远程设备, 快速测试设备端应用逻辑 2. 基于 Visual Studio Code IDE 开发, 提高开发效率 对于 udevice Center: 1. 通过 TinyLink 语言, 屏蔽硬件平台的差异 2. 代码云端编译, 无需配置本地编译环境

开发流程 Step 1: 在 VS Code IDE 中, 编写 TinyLink 程序 ; Step 2: 根据 TinyLink 编译后输出的硬件配置, 在 udc 中选择相应的硬件类型 ; Step 3: 点击分配的硬件, 并把编译后的程序烧写到相应硬件 ; Step 4: 在控制台观察程序运行结果 ;

Visual Studio Code IDE 介绍 TinyLink 插件 : 选择 TinyLink 代码 代码编译 编译信息及硬件配置

Visual Studio Code IDE 介绍 udevice Center 插件 : 打开交互窗口 打开 / 关闭日志打印 烧写代码 烧写最近一次编译的代码 重置设备 代码调试 ( 目前系统不支

开发示例 室内环境监测系统 以 2s 为周期, 采集室内温度 湿度 光照信息 通过串口, 输出采集到的室内环境信息

准备工作 准备一 : 下载 Visual Studio Code 并安装 (https://code.visualstudio.com/)

准备工作 准备二 : 在 Visual Studio Code 中, 安装插件 2. 点击更多选项 1. 点击扩展按钮 3. 从 VSIX 安装

开发流程 步骤一 : 打开 Visual Studio Code IDE, 编写 TinyLink 程序

开发流程 步骤二 : 打开 TinyLink 插件, 编译 TinyLink 代码 若编译成功, 生成硬件配置 在本例中, 生成的硬件配置为 tinylink_platform_1 ; 否则, 显示编译出错信息 同时按下 Ctrl+Shift+P, 打开 TinyLInk 插件 选择 TinyLink 代码 编译 编译信息及硬件配置

开发流程 步骤三 : 打开 udevice Center 插件, 根据 TinyLink 生成的硬件配置, 申请对应硬件 若申请成功, 显示可视化硬件设备 ; 否则, 显示 no available device 错误 提示 : 同时按下 Ctrl+Shift+P, 打开 udevice Center 插件, 申请硬件设备 若申请失败, 说明目前没有空闲设备, 需要用户等待一段时间再次申请 申请到的硬件设备

开发流程 步骤四 : 选择分配的硬件, 把编译后的程序烧写到相应的硬件中点击设备 Program Last Build 选项, 系统自动将编译后的文件烧写到所选择的设备中 设备烧写

开发流程 步骤五 : 查看程序运行结果 点击设备 Shell 选项, 打开 Shell 交互窗口, 查看设备串口输出 打开 Shell 串口输出信息 注意 : 程序运行结束后请及时关闭插件, 否则会一直占用设备

目录 概述 使用 TinyLink 开发案例 实现机理 远程实验室 相关研究进展 总结与未来工作

物联网开发技术回顾 功能强大的硬件平台 Matrix 开发板自带 15 种传感器 打造智能家居 App 生态系统 App 市场有 175+ 应用 提供大量视觉算法 机器学习算法供开发 Firestorm [IPSN 16] 集成了传感网 可穿戴 移动端和创客领域的最新技术 支持 BLE 802.15.4 WiFi 和蜂窝网络 支持 TCP/UDP IPv4/IPv6 LowPan 等协议 可支持插接 Arduino 开发板 Cortex-M4 Storm 开发板

物联网开发技术回顾 开源硬件 Arduino 简单上手 : 简单易懂的 API, 丰富的库封装, 无需硬件知识 ; 不需要硬件烧录器,USB 线即可烧录 ; 支持 WebIDE 编程 完全开源 : 硬件原理图 电路图 IDE 软件及核心库文件都是开源的, 在开源协议内, 可以任意修改原始设计及相应代码 扩展性强 : 支持多种通讯协议, 物理接口类型统一且数量多, 有着丰富的盾板和外设 微软.NET Gadgeteer 开发容易 : 基于完全开源的.NET Micro Framework, 支持 C# 语言开发, 采用强大的 Visual Studio 进行程序开发和在线调试 可视化编程 : 支持硬件拖拉可视化编程, 通过拖拉让核心主板和这些模块相连, 自动完成接口初始化 模块初始化等工作 接口丰富 : 微软定义了 20 种.NET Gadgeteer 接口类型, 是微软为工控领域制订 OPC 技术标准以来, 最重要的一个接口标准

物联网开发技术回顾 即插即用技术 Building Block Approach [SenSys 08] 提供积木式的母板和外设模块 ( 包括 MCU 存储 USB 等 ) 暴露大量物理接口, 减少系统总线, 让母板和模块直接相连 设计了大量的通用模块和三款通用母板, 通过重复利用模块来达到不同的应用设计需求 母板 模块

物联网开发技术回顾 即插即用技术 Signpost Platform [IPSN 18] 提供模组化的 具有能量采集能力的传感平台, 可直接独立部署于城市中的交通信号灯柱上, 无需额外设备 通过统一的模块化设计, 只用模块背面的针脚连接, 通过其中 I 2 C 和 USB 等数据总线进行通讯, 实现所有模块即插即用 通过母板背部的太阳能电板, 可以给所有母板和模块供电

物联网开发技术回顾 虚拟化设备 IOTIFY 提供大量的虚拟传感器和执行器来构建全栈物联网应用 提供 IoT 设备全仿真平台, 可云端构建应用程序并进行测试, 多种在线可视化工具显示运行结果 通过 JavaScript 构建设备模型, 利用 MQTT/CoAP/HTTP 协议与 AWS 等云平台无缝连接, 让用户简易的编写应用

目录 概述 使用 TinyLink 开发案例 实现机理 远程实验室 相关研究进展 总结与未来工作

TinyLink 视频

TinyLink 总结 6 主板 Arduino 系列, LinkIt 系列, 树莓派系列, BeagleBone 系列, Mbed M0, AliOS MK3060 100 + 外设 4 云平台 阿里云 IoT 套件, IBM Watson 百度 IoT Hub, 中国移动 OneNet 自顶向下快速硬件无关

TinyLink 成果 论文与专利 Towards Rapid and Cost-Effective Prototyping of IoT Platforms, IEEE ICNP Workshop Hot-IoT 2016 Rapid Development of IoT Applications with TinyLink, IEEE INFOCOM 2017 Demo TinyLink: a Holistic System for Rapid Development of IoT Applications, ACM MobiCom 2017,CCF A 发明专利 一种自动生成物联网节点硬件配置的方法,201711127467.2, 目前已受理

未来工作 TinyLink & Link 更好的编程方式 更多的代码库 驱动 开源 复杂事件处理

You Innovate, we automate! 谢谢! Email: dongw@zju.edu.cn