1.前言

前段时间玩了树莓派的GPIO,串口和I2C接口,把树莓派当成单片机来玩,期间深入分析了wiringPi。相对于单片机,以Linux为操作系统的树莓派在网络功能方面要强大的多,下面就结合当下流行的云平台yeelink实现远程控制LED灯。该部分的代码通过python实现,它的简洁易用深深吸引了我。LED的控制由PCF8574实现,树莓派通过I2C接口和PCF8574相连,PCF8574是一个简单易用的GPIO扩展IC。

2.相关博文

列举一些相关博客,你一定会有所收获。

2.1 Yeelink相关

【 Yeelink平台使用——远程控制 RT Thread + LwIP+ STM32】
使用STM32+LWIP+RTThread实现,需要有一定的嵌入式基础和套接字编程经验才可以上手,相对于本文来说难度大的多。
【 Yeelink Http请求格式分析】
带你上手yeelink平台,体会REST API的设计和使用。
【 cURL 学习笔记——结合yeelink平台】
cURL工具可以帮助你测试yeelink平台API函数,如果遇到问题这是一个很好的解决问题的途径。
【 Yeelink平台查询开关量——套接字编程 Windows平台】
在windows平台上使用mingw实现,通过该方法可以熟悉socket。

2.2 树莓派相关

【 树莓派学习笔记——I2C PCF8574 BCM2835 Library】
使用BCM2835 Library实现PCF8574扩展IO
【 树莓派学习笔记 ——I2C PCF8574 SysFs方式】
使用SysFS方式实现PCF8574扩展IO

【树莓派学习笔记——I2C使用 PCF8574 Python SMBUS】

使用Python SMBUS实现PCF8574扩展IO

3.工作流程

可通过手机客户端发送POST请求,该LED的URI为/v1.0/device/1949/sensor/2511/datapoints。通过POST请求修改LED状态,树莓派间隔想Yeelink平台请求该LED状态,通过响应中的value结构设置真正的LED。

设置LED状态——手机客户端

POST请求格式如下:
POST /v1.0/device/1949/sensor/2511/datapoints HTTP/1.1
U-ApiKey: ffa3826972d6cc7ba5b17e104ec5xxxx
Host: api.yeelink.net
Content-Length: 11
{"value":1} 

查询LED状态——树莓派间隔向yeelink查询开关状态

GET响应格式如下:
HTTP/1.1 200 OK
Content-Type: text/html
Connection: keep-alive
Content-Length: 45{"timestamp":"2013-02-24T20:05:44","value":0}
此时value的值为处理的核心。

4.代码实现

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import smbus
import RPi.GPIO as GPIO
import time
# 打开 /dev/i2c-1
bus = smbus.SMBus(1)
# 设备URI
apiurl = 'http://api.yeelink.net/v1.0/device/1949/sensor/2511/datapoints'
# 用户密码
apiheaders = {'U-ApiKey': 'ffa3826972d6cc7ba5b17e104ec5xxxx'}
while True:#发送请求r = requests.get(apiurl,headers=apiheaders)# 打印响应内容print(r.text)# 转换为字典类型 请注意 2.7.4版本使用r.json()led = r.json# {'value':x} x=1打开状态,x=0关闭状态if led['value'] == 1:print("led on")bus.write_byte( 0x20 , 1 )else:print("led off")bus.write_byte( 0x20 , 0 )# 延时5Stime.sleep(5)
【运行结果】
图1 LED状态从关闭到打开
【代码分析】
1.设备URI,请根据设备实际URI修改。
apiurl = 'http://api.yeelink.net/v1.0/device/1949/sensor/2511/datapoints'
2.U-Apikey本质为用户密码,请根据实际密码修改。
apiheaders = {'U-ApiKey': 'ffa3826972d6cc7ba5b17e104ec5xxxx'}
3.发送请求,使用requests库实现get请求,请注意headers为该HTTP请求首部,该首部需要包括用户APIKEY。requests是一个简单好用的网络通信工具,后期博文还会整理归类。
r = requests.get(apiurl,headers=apiheaders)
4.响应转换内容为字典形式,把json格式变化为python字典形式,那么就可以通过“ ”查询到“ ”,此时键为value,值为1或者0。通过测试发现,树莓派中的python版本为2.7.3,r.json的类型是字典类型,但是在2.7.4(我的windows电脑安装的python)中 r.json()才是字典类型
led = r.json
5.根据value键的值修改LED状态
# {'value':x} x=1打开状态,x=0关闭状态
if led['value'] == 1:
print("led on")
bus.write_byte( 0x20 , 0x01 )
else:
print("led off")
bus.write_byte( 0x20 , 0x00 )
6.SMBUS操作简述
打开I2C设备。树莓派版本2为I2C设备的编号为1(从0开始编号)
bus = smbus.SMBus(1)
向PCF8574写入一个字节,请千万小心0x01代表打开LED1,0x02代笔打开LED2,但是 0x03并不是打开LED3,而是打开了LED1和LED2
bus.write_byte( 0x20 , 0x01 )

5.总结和文字债

可以在未来继续总结的内容——python requests库使用;python smbus使用。

树莓派学习笔记——yeelink 远程控制LED相关推荐

  1. 树莓派学习笔记——获取树莓派CPU温度

    0 前言 本文通过文件操作读取树莓派CPU温度,在linux系统中任何设备的操作都被抽象成为文件读写,通过读取/sys/class/thermal/thermal_zone0/temp文件中的内容便获 ...

  2. 树莓派学习笔记——定时向yeelink上传树莓派CPU温度

    0 前言 本文通过python文件IO操作获得树莓派CPU温度信息,通过python request库周期性向yeelink平台上传温度,修改rc.local脚本使得该python脚本在开机时便在后台 ...

  3. 树莓派学习笔记——GPIO功能学习

    0.前言 树莓派现在越来越火,网上树莓派的资料也越来越多.树莓派源自英国,国外嵌入式开源领域具有良好的分享精神,树莓派各种集成库也层出不穷,下面推荐几个. [ python GPIO ] [开发语言] ...

  4. 树莓派学习笔记(5):成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)

    一.家庭服务器实现的主要功能 http://www.cnblogs.com/xiaowuyi/p/4051238.html 1.流媒体播放服务:利用DLNA实现电视.手机.电脑播放其上面的媒体文件. ...

  5. 树莓派学习笔记——Python SQLite插入温度记录

    0 前言 本文使用python向SQLite数据库中插入树莓派温度数据,SQLite数据库中包含一张只包含三个字段的记录表--参数名称,时间和温度值.本文重点解释Python操作SQlite的具体方法 ...

  6. 树莓派学习笔记(一)

    树莓派学习笔记 笔记来自B站UP主[树小悉]的树莓派系列视频的听课笔记,通俗易懂,风趣幽默,适合新手入门,强烈推荐!!! 关机命令 sudo poweroff 关闭电源 sodo shutdown - ...

  7. 树莓派学习笔记—— 源代码方式安装opencv

    0.前言 本文介绍如何在树莓派中通过编译源代码的方式安装opencv,并通过一个简单的例子说明如何使用opencv. 更多内容请参考--[树莓派学习笔记--索引博文] 1.下载若干依赖项 在开始安装之 ...

  8. 【STM32学习笔记-点亮LED灯】

    STM32学习笔记-点亮LED灯 文章目录 STM32学习笔记-点亮LED灯 一.原理图分析 二.代码分析 1.mian函数 2.led.c函数 3.led.h函数 4.函数文件整理 5.LED_In ...

  9. 树莓派学习笔记——Wifi AP热点模式 使用RT5370

    0.前言 本文详细说明为树莓派增加Wifi AP热点功能的具体步骤.配置完成之后,树莓派将增加一个Wifi热点功能,使用笔记本或手机便可连接树莓派,树莓派具有了AP热点功能,可更一步扩展树莓派相关的W ...

最新文章

  1. postgresql高可用_Postgresql高可用实现方案
  2. wine安装lingoes
  3. 【NLP】用BERT进行机器阅读理解
  4. tkinter打开文件选择窗口
  5. 51nod-诺德街【数学期望】
  6. fwrite在任意位置写入文件,并可修改文件内容
  7. 这可能是最适合C++学习者的书单
  8. PB与各种数据库连接
  9. 前端开发的模块化和组件化的定义,以及两者的关系?
  10. WPS Office Pro 2016 专业版
  11. 操作系统抖动现象、网络抖动与延迟、函数抖动之防抖与节流
  12. 谈谈你对keep-alive的了解
  13. 面试问题中的十大算法
  14. 改变自己是神,改变别人是神经病
  15. HTC Vive VR操作规范书
  16. 华为服务器gpu芯片怎么样,GPU服务器怎么样
  17. JAVA:获取用户访问ip地址
  18. 操作系统课后习题答案(作业题)
  19. 数据恢复精灵视频教程(二)恢复已删除的文件
  20. 我的PC DIY之内存

热门文章

  1. 大数据平台的服务内容以及猛犸大数据平台近期的思考【摘录】
  2. 论文阅读:Predicting Dynamic Embedding Trajectory inTemporal Interaction Networks(JODIE模型)
  3. mac常见问题(六) Mac运行变慢是什么原因?怎么提高Mac运行速度
  4. Deep Dream模型与实现
  5. 超声波测距,1602显示距离
  6. 通过yum获取rpm离线安装包
  7. NOIP(CSP-J)信息学奥赛_普及组第八课--“一分为N看问题“
  8. html select联动,select标签实现二级联动
  9. 关于基数(即:索引值)和序数的两者区别
  10. 使用POI的excel导入图片,并将图片上传至fastdfs文件服务器