基于腾讯云物联网开发平台的光照传感器
构建光照传感器
硬件
- NodeMCU ESP8266
 - 光照度传感器
 - 面包板
 - 杜邦线
 - USB数据线
 
NodeMCU 的管脚图

电路图

光照传感器

物联网开发平台
平台使用流程

① 登录腾讯云物联网开发平台控制台,进入公共实例

③ 创建产品
选择智能家居,新建产品:光照传感器。

④ 定义数据模板
- 选择数据模板,通过导入自定义数据模板。
    
{ "version": "1.0", "profile": { "ProductId": "您的产品ID", "CategoryId": "112" }, "properties": [ { "id": "Illuminance", "name": "光照度", "desc": "光照度检测", "mode": "r", "define": { "type": "float", "unit": "Lux", "min": "0", "max": "6000", "start": "0", "step": "1" } } ], "events": [], "actions": [] }
 - 导入成功

 
⑥ 交互开发

⑦ 设备调试
- 
    
新建设备

 - 
    
创建成功

 - 
    
新建设备的二维码,可以使用腾讯连连扫描快速增加。

 - 
    
在线调试

 
软件实现
参考数据模板协议开发用于上报设备的状态和控制设备的指令。可由腾讯云物联网平台提供的生成小工具自动生成,想了解更多的详情,请查看MQTT.fx 快速接入指引。
MQTT用户名和密码生成工具

配置您自己的信息
WiFi(用于联网)
- ESSID
 - PASSWORD
 
IOT平台定义的设备信息
- DEVICE_NAME(设备名称)
 - PRODUCT_ID(产品ID)
 - DEVICE_KEY(设备密钥)
 
MQTT
- MQTT_USERNAME
 - MQTT_PASSWORD
 
代码
- wifi.py
    
import network ESSID = "" PASSWORD = "" def connect(essid=ESSID, password=PASSWORD): wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect(essid, password) while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) - light.py
    
from machine import ADC from machine import Pin class Light(): """ 基于 PT550 环保型光敏二极管的光照传感器元器件,它的灵敏度更高,测量范围是 0Lux~6000Lux。 Lux(勒克斯)是光照强度的单位,它和另一个概念 Lumens(流明)是不同的。Lumens 是指一个光源(比如电灯、投影仪)发出的光能力的总量,而 Lux 是指空间内一个位置接收到的光照的强度。 因为 ADC 支持的最大位数是 12bit,所以这个数值范围是 0~4095 之间。这里按照线性关系做一个转换。 """ def __init__(self, pin): self._light = ADC(Pin(pin)) def value(self): value = self._light.read() print("Light ADC value:", value) return int(value/4095*6000) - tencent_mqtt.py
    
import time import ujson from umqtt.simple import MQTTClient from light import Light """ QCloud Device Info """ DEVICE_NAME = "" PRODUCT_ID = "" DEVICE_KEY = "" """ MQTT topic """ MQTT_DEVICE_CONTROL_TOPIC = "$thing/down/property/"+PRODUCT_ID+"/"+DEVICE_NAME MQTT_DEVICE_STATUS_TOPIC = "$$thing/up/property/"+PRODUCT_ID+"/"+DEVICE_NAME MQTT_SERVER = PRODUCT_ID + ".iotcloud.tencentdevices.com" MQTT_PORT = 1883 MQTT_CLIENT_ID = PRODUCT_ID+DEVICE_NAME MQTT_USERNAME = "" MQTT_PASSWORD = "" class LightSensor(): def __init__(self): self.light = Light(36) class TencentMQTT(): light_sensor = LightSensor() def __init__(self): self.mqtt_client = None def connect(self): self.mqtt_client = MQTTClient(MQTT_CLIENT_ID, MQTT_SERVER, MQTT_PORT, MQTT_USERNAME, MQTT_PASSWORD, 60) self.mqtt_client.set_callback(TencentMQTT.control) self.mqtt_client.connect() """ 接收订阅的消息(用于远程控制) """ @staticmethod def control(topic, msg): pass """ 发送设备的状态消息 """ def report(self): msg = { "method": "report", "clientToken": "clientToken-0123456789", "params": { "Illuminance": self.light_sensor.value() } } self.mqtt_client.publish(MQTT_DEVICE_STATUS_TOPIC.encode(), ujson.dumps(msg).encode()) """ 消息循环 """ def loop(self): self.mqtt_client.subscribe(MQTT_DEVICE_CONTROL_TOPIC.encode()) up_time = 5000 time_sleep = 50 time_count = 0 while True: self.mqtt_client.check_msg() time_count += time_sleep if (time_count >= up_time): self.report() time_count = 0 time.sleep_ms(time_sleep) - main.py
    
import wifi from tencent_mqtt import TencentMQTT if __name__ == '__main__': wifi.connect() mqtt = TencentMQTT() mqtt.connect() mqtt.loop() 
程序写入开发板
$ ./pyboard.py --device /dev/cu.usbserial-0001 -f cp light.py wifi.py main.py tencent_mqtt.py :
远程控制
在微信中打开腾讯连连小程序,添加-扫一扫。

扫描下面光照传感器的二维码。

添加成功

查看设备状态

参考资料
- 腾讯云物联网开发平台入门
 - MQTT.fx-目前主流的MQTT桌面客户端
 - MQTT X
 - MQTT Version 3.1.1 协议标准
 - MQTT协议
 - umqtt.simple
 - MicroPython – Getting Started with MQTT on ESP32/ESP8266
 - uasyncio — asynchronous I/O scheduler
 - The Breathing Lamp
 - micropython-async
 - MicroPython Random number generation?
 - General information about the ESP8266 port
 - MicroPython libraries
 - MicroPython 相关库
 - Enable two-way SSL/TLS for EMQ X
 - Online UUID Generator
 - 乐鑫信息科技