iot,internet of things

环境搭建

使用真实环境

Single-board computer - Raspberry Pi

Arduino - Wio Terminal

或者虚拟环境

Single-board computer - Virtual device

个人使用了虚拟环境

pip install CounterFit
pip install counterfit-connection
pip install counterfit-shims-grove
//启动虚拟环境
counterfit

lesson1

sensor

Sensors are either analog or digital.

传感器,模拟和数字两种,是用来从物理世界收集信息的器件。

通过虚拟环境启动一个传感器。

counterfit
//然后打开浏览器访问127.0.0.1:5000,也可以通过-port指定端口



类型选择light,units选择nounits,pin选1

创建后如下所示



测试代码

import time
from counterfit_connection import CounterFitConnection
from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor CounterFitConnection.init('127.0.0.1', 5000)
light_sensor = GroveLightSensor(0) while True:
light = light_sensor.light
print('Light level:', light)
time.sleep(1)

运行,并在创建的传感器那里设置数值,结果如下

$ python3 ./app.py
Light level:500
Light level:500
Light level:500
Light level:500
Light level:500
Light level:500
Light level:800
Light level:800
Light level:800
Light level:800
Light level:100
Light level:100
Light level:100
Light level:100
Light level:100

actuator

they convert an electrical signal from your IoT device into an interaction with the physical world such as emitting light or sound, or moving a motor.

从虚拟环境启动actuator



测试代码

import time
from counterfit_connection import CounterFitConnection
from counterfit_shims_grove.grove_led import GroveLed
from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor CounterFitConnection.init("127.0.0.1", 5000) led = GroveLed(5)
sensor = GroveLightSensor(0) while(1):
light = sensor.light
print('Light level:', light)
if light < 500 :
led.on()
else:
led.off() time.sleep(1)

通过在传感器设置不同的值,可以控制led的打开与关闭

通信协议

通信模型



MQTT 是物联网设备最流行的通信协议,本课程将对此进行介绍。其他协议包括 AMQP 和 HTTPS。

将虚拟设备连接到MQTT代理,使用公开的MQTT代理https://test.mosquitto.org/

首先安装MQTT

pip3 install paho-mqtt

测试代码

import time
from counterfit_connection import CounterFitConnection
from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor CounterFitConnection.init('127.0.0.1', 5000)
light_sensor = GroveLightSensor(0) #mqtt相关
id = '<ID>' #因为代理是公开的所以需要一个唯一的标识符来分别,可以去生成一个唯一的uid在这里使用
client_name = id + 'nightlight_client'
import paho.mqtt.client as mqtt
mqtt_client = mqtt.Client(client_name)
mqtt_client.connect('test.mosquitto.org')
mqtt_client.loop_start()
print("MQTT connected!") while True:
light = light_sensor.light
print('Light level:', light) time.sleep(1)

iot设备向MQTT发送数据

数据以json格式发送

测试代码

import time
import json
import paho.mqtt.client as mqtt
from counterfit_connection import CounterFitConnection
from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor CounterFitConnection.init('127.0.0.1', 5000)
light_sensor = GroveLightSensor(0) id = '<0a82aeb8-7817-4640-81ef-b6bcc667f242>'
client_telemetry_topic = id + '/telemetry'
client_name = id + 'nightlight_client' mqtt_client = mqtt.Client(client_name)
mqtt_client.connect('test.mosquitto.org')
mqtt_client.loop_start()
print("MQTT connected!") while True:
light = light_sensor.light
telemetry = json.dumps({'light' : light})
print('send Light level:', light)
mqtt_client.publish(client_telemetry_topic, telemetry) time.sleep(1)

从MQTT代理接收遥测数据

效果如下



测试代码

import json
import time import paho.mqtt.client as mqtt id = '<ID>' client_telemetry_topic = id + '/telemetry'
client_name = id + 'nightlight_server' mqtt_client = mqtt.Client(client_name)
mqtt_client.connect('test.mosquitto.org') mqtt_client.loop_start() def handle_telemetry(client, userdata, message):
payload = json.loads(message.payload.decode())
print("Message received:", payload) mqtt_client.subscribe(client_telemetry_topic)
mqtt_client.on_message = handle_telemetry while True:
time.sleep(2)

在实际使用时要考虑到多久发送一次或者接受一次数据比较合适,还要考虑如果因为网络原因数据丢失时应怎样处理

MQTT代理向IOT设备发送命令

测试代码

import json
import time import paho.mqtt.client as mqtt id = '<ID>' client_telemetry_topic = id + '/telemetry'
server_command_topic = id + '/commands'
client_name = id + 'nightlight_server' mqtt_client = mqtt.Client(client_name)
mqtt_client.connect('test.mosquitto.org') mqtt_client.loop_start() def handle_telemetry(client, userdata, message):
payload = json.loads(message.payload.decode())
print("Message received:", payload) command = { 'led_on' : payload['light'] < 300 }
print("Sending message:", command) client.publish(server_command_topic, json.dumps(command)) mqtt_client.subscribe(client_telemetry_topic)
mqtt_client.on_message = handle_telemetry while True:
time.sleep(2)

IOT设备处理MQTT发送的命令

测试代码

import time
from counterfit_connection import CounterFitConnection
from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor
from counterfit_shims_grove.grove_led import GroveLed
import json
import paho.mqtt.client as mqtt CounterFitConnection.init('127.0.0.1', 5000) light_sensor = GroveLightSensor(0)
led = GroveLed(5) id = '<ID>' client_telemetry_topic = id + '/telemetry'
server_command_topic = id + '/commands'
client_name = id + 'nightlight_client' mqtt_client = mqtt.Client(client_name)
mqtt_client.connect('test.mosquitto.org') mqtt_client.loop_start() def handle_command(client, userdata, message):
payload = json.loads(message.payload.decode())
print("Message received:", payload) if payload['led_on']:
led.on()
else:
led.off() mqtt_client.subscribe(server_command_topic)
mqtt_client.on_message = handle_command while True:
light = light_sensor.light
print('Light level:', light) mqtt_client.publish(client_telemetry_topic, json.dumps({'light' : light}))
time.sleep(3)

这里sleep(3)是因为网络的原因,两端消息不太同步,所以放慢了一点

测试效果如下

hello-iot的更多相关文章

  1. 《连载 | 物联网框架ServerSuperIO教程》-4.如开发一套设备驱动,同时支持串口和网络通讯。附:将来支持Windows 10 IOT

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  2. 开源物联网框架ServerSuperIO 3.0正式发布(C#),跨平台:Win&Win10 Iot&Ubuntu&Ubuntu Mate,一套设备驱动跨平台挂载,附:开发套件和教程。

    3.0版本主要更新内容: 1.增加跨平台能力:Win&Win10 Iot&Ubuntu&Ubuntu Mate 2.统一设备驱动接口:可以一套设备驱动,跨平台挂载运行,降低人力 ...

  3. 开源物联网通讯框架ServerSuperIO,成功移植到Windows10 IOT,在物联网和集成系统建设中降低成本。附:“物联网”交流大纲

    [开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 一.概述 经过一个多月晚上的时间,终于把开源物联网通讯框架ServerSuperIO成功移植到Windows10 IOT上, ...

  4. 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序

    物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...

  5. Win10 IoT C#开发 4 - UART 串口通信

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...

  6. Azure IoT带来更高效的新能源生产和会看人脸色的无人超市

    全球分析机构都认为物联网将在未来几年呈现爆发式增长,到2020年,各种传感器.新型物联网设备,再加上传统PC.智能手机.平板电脑.网络电视,以及各类可穿戴智能设备,将交织成一个由300亿到500亿台设 ...

  7. 《Windows IoT 应用开发指南》

    物物互联的时代已经到来,智能家居.智慧校园.智慧交通.可穿戴.无人机.全息投影,各种各样的新名词.黑科技层出不穷.当我们为五年前能够通过手机控制家电而欣喜若狂的时候,可曾憧憬过当前使用增强现实设备完成 ...

  8. Microsoft IoT Starter Kit 开发初体验

    1. 引子 今年6月底,在上海举办的中国国际物联网大会上,微软中国面向中国物联网社区推出了Microsoft IoT Starter Kit ,并且免费开放1000套的申请.申请地址为:http:// ...

  9. Windows 10 IoT Serials 3 - Windows 10 IoT Core Ardunio Wiring Mode

    Maker社区和智能硬件的朋友一定知道Arduino,很多3D打印机都是用它做的.为了迎合这一大块市场,微软在基于Intel Galileo的Windows 8.1 IoT中就是使用这种基于Ardui ...

  10. Windows 10 IoT Serials 2 - Windows 10 IoT RTM 升级教程

    7月29日,微软推出了Windows 10 for PC的正式版,其版本号是Build 10240.近两天官方说已经有4700万的下载安装量,同时这个数字还在不断攀升.另外,除了Windows 10 ...

随机推荐

  1. DVWA-SQL Injection(SQL注入)

    SQL Injection,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的.结构,从而达到执行恶意SQL语句的目的. LOW: 代码审计: SQL Injection Source vuln ...

  2. 什么是Redis持久化,如何理解?

    其实redis就是一种高级的以键值对形式存储数据的数据库,而它的好处就是他可以支持数据的持久化,其实redis之所以会有这样的优点,主要是因为,redis的数据都是存放在内存中的,如果不配置持久化,那 ...

  3. ks.cfg 怎么读取光盘 (cdrom) 上的文件并执行对应的脚本

    ks.cfg 文件怎么实现读取光盘 (CDROM) 上的内容并执行自定义脚本我们知道 linux 系统安装过程中,要想实现自动化安装,一般都是利用 Kickstart 这个工具实现,最重要的就是其配置 ...

  4. crontab使用说明【一文搞懂Linux定时任务Crontab】

    1.简介 cron是一个在后台运行调度的守护进程,而crontab是一个设置cron的工具.cron调度的是/etc/crontab文件. 2.centos安装crontab yum install ...

  5. SwitchHosts operation not permitted 解决方案--亲测有效

    SwitchHost!是帮助我们管理Hosts的工具,可以帮助我们做域名解析, 弥补了如果要修改域名还要改计算机C:\Windows\System32\drivers\etc位置下的hosts文件的弊 ...

  6. Django笔记十五之in查询及date日期相关过滤操作

    这一篇介绍关于范围,日期的筛选 in range date year week weekday quarter hour 1.in in 对应于 MySQL 中的 in 操作,可以接受数组.元组等类型 ...

  7. 你绝对没想到的GPT的底层意义

    学会说话才是完整的人 有种说法在民间流传已久,在某些非洲部落中,孩子出生后往往会被称作"小人"或者"半个人",直到他们能够进行语言的交流才被认为是完全的人.这是 ...

  8. Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】

    Unity学习参考文档和开发工具 unity的官网文档:https://docs.unity3d.com/cn/current/Manual/ScriptingSection.html ■ 学习方式: ...

  9. Nuxtjs实现服务端渲染和静态化站点

    本文将介绍如何使用Nuxtjs对vue项目进行ssr和静态化处理. Nuxtjs简单介绍 首先,我们简单了解下Nuxtjs框架,Nuxt.js是一个基于Vue的通用框架,主要用于解决Vue项目的服务端 ...

  10. AspNetCore 成长杂记(一):JWT授权鉴权之生成JWT(其一)

    引子 最近不知怎么的,自从学了WebAPI(为什么是这个,而不是MVC,还不是因为MVC的Razor语法比较难学,生态不如现有的Vue等框架,webapi很好的结合了前端生态)以后,使用别人的组件一帆 ...