环境

Qemu: 2.8.0
开发板:vexpress-ca9

概述

前面的博文已经使我们的虚拟开发板具备了访问外网的目的,离物联网越来越近了。要玩物联网,Yeelink不得不说,它提供了云平台,可以将设备的数据上传到云端,也可以联网获得云端的数据,我们可以通过手机客户端或在网页端查看或修改,从而达到用手机客户端跟嵌入式设备通信的目的。
下面我们实现一个非常简单的功能: 添加一个虚拟开关,通过Yeelink的手机客户端或在网页端可以查看和修改这个开端的状态,而我们的板子会每隔2s联网读取一次这个虚拟开关的状态,最后板子根据开关的状态打印不同的提示。

正文

一、首先登陆Yeelink官网,手动添加一个device,然后在该device下面再创建一个sensor用来代表虚拟开关。
二、为Python添加requests模块
Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库。它比urllib更加方便,可以节约我们大量的工作,完全满足HTTP测试需求。
1、下载requests模块
下载地址: https://pypi.python.org/pypi/requests/2.3.0 或 requests-2.3.0.tar.gz
解压后:
$ls
HISTORY.rst  NOTICE      requests/           setup.cfg
LICENSE      PKG-INFO    requests.egg-info/  setup.py*
MANIFEST.in  README.rst  requirements.txt    test_requests.py*

其中的requests既可以用于Python2也可以用于Python3,然后将这个requests目录拷贝到对应Python的site-packages下面。

在导入requests模块的时候,会提示找不到zlib模块。
2、重新编译Python,支持zlib
下载zlib: http://www.zlib.net/zlib-1.2.11.tar.gz 或 zlib-1.2.11.tar.gz 
  • 编译zlib:
1 #!/bin/bash
2
3 export CC=arm-none-linux-gnueabi-gcc
4
5 ../zlib-1.2.11/configure \
6     --prefix=`pwd`

修改Makefile,修改AR和RANLIB如下:

AR=arm-none-linux-gnueabi-ar
RANLIB=arm-none-linux-gnueabi-ranlib

然后执行make && make install, 安装完成之后不要忘了把lib下的so和include下的头文件拷贝到板子上
  • 编译Python3:
 1 #!/bin/bash
 2
 3 ../Python-3.6.0/configure \
 4     --host=arm-none-linux-gnueabi \
 5     --build=armv7 \
 6     --prefix=`pwd` \
 7     --enable-ipv6 \
 8     --enable-shared \
 9     ac_cv_file__dev_ptmx="yes" \
10     ac_cv_file__dev_ptc="no" \
11     LDFLAGS="-L/home/pengdonglin/disk_ext/Third_Part/SQlite3/aarch32/lib \
12     -L/home/pengdonglin/disk_ext/Third_Part/Readline/aarch32/lib \
13     -L/home/pengdonglin/disk_ext/Third_Part/Termcap/aarch32/lib \
14     -L/home/pengdonglin/disk_ext/Third_Part/Zlib/aarch32/lib"\
15     CPPFLAGS="-I/home/pengdonglin/disk_ext/Third_Part/SQlite3/aarch32/include \
16     -I/home/pengdonglin/disk_ext/Third_Part/Readline/aarch32/include \
17     -I/home/pengdonglin/disk_ext/Third_Part/Termcap/aarch32/include \
18     -I/home/pengdonglin/disk_ext/Third_Part/Zlib/aarch32/include"\
19     LDLAST="-L/home/pengdonglin/disk_ext/Third_Part/Readline/aarch32/lib \
20     -L/home/pengdonglin/disk_ext/Third_Part/Termcap/aarch32/lib \
21     -L/home/pengdonglin/disk_ext/Third_Part/Zlib/aarch32/lib"
22
23 make -j4
24 make install

安装完成后,也可以直接将lib/python3.6/lib-dynload/zlib.cpython-36m-arm-linux-gnueabi.so拷贝到板子上面的/usr/lib/python3.6/lib-dynload/下面即可, 而不必全部更新

  • 编译Python2:
mk1_conf.sh:
 1 #!/bin/bash
 2
 3 ../Python-2.7.13/configure --prefix=`pwd` \
 4     --host=arm-none-linux-gnueabi \
 5     --build=x86_64-linux-gnu \
 6     --enable-ipv6 \
 7     --enable-shared \
 8     ac_cv_file__dev_ptmx="yes" \
 9     ac_cv_file__dev_ptc="no" \
10     LDFLAGS="-L/home/pengdonglin/disk_ext/Third_Part/SQlite3/aarch32/lib \
11     -L/home/pengdonglin/disk_ext/Third_Part/Readline/aarch32/lib \
12     -L/home/pengdonglin/disk_ext/Third_Part/Termcap/aarch32/lib \
13     -L/home/pengdonglin/disk_ext/Third_Part/Zlib/aarch32/lib"\
14     CPPFLAGS="-I/home/pengdonglin/disk_ext/Third_Part/SQlite3/aarch32/include \
15     -I/home/pengdonglin/disk_ext/Third_Part/Readline/aarch32/include \
16     -I/home/pengdonglin/disk_ext/Third_Part/Termcap/aarch32/include \
17     -I/home/pengdonglin/disk_ext/Third_Part/Zlib/aarch32/include"\
18     LDLAST="-L/home/pengdonglin/disk_ext/Third_Part/Readline/aarch32/lib \
19     -L/home/pengdonglin/disk_ext/Third_Part/Termcap/aarch32/lib \
20     -L/home/pengdonglin/disk_ext/Third_Part/Zlib/aarch32/lib"\

mk2_make.sh:
 1 #!/bin/bash
 2
 3 make HOSTPYTHON=../x86_64/python \
 4     HOSTPGEN=../x86_64/Parser/pgen \
 5     BLDSHARED="arm-none-linux-gnueabi-gcc -shared" \
 6     CROSS_COMPILE=arm-none-linux-gnueabi- \
 7     CROSS_COMPILE_TARGET=yes \
 8     HOSTARCH=arm-none-linux-gnueabi \
 9     BUILDARCH=x86_64-linux-gnu \
10     -j4

mk3_install.sh:
1 #!/bin/bash
2
3 make install HOSTPYTHON=../x86_64/python \
4     BLDSHARED="arm-none-linux-gnueabi-gcc -shared" \
5     CROSS_COMPILE=arm-none-linux-gnueabi- \
6     CROSS_COMPILE_TARGET=yes \
7     prefix=`pwd`

安装完成后,也可以直接将lib/python2.7/lib-dynload/zlib.so拷贝到开发板的/usr/lib/python2.7/lib-dynload/下面,而不用全部更新

  • 然后修改mk_ramdisk.sh:
 1 #!/bin/bash
 2
 3 thiry_part=/home/pengdonglin/disk_ext/Third_Part/
 4 cross_compile=/home/pengdonglin/disk_ext/Cross_Compiler/aarch32/
 5
 6 sudo rm -rf rootfs
 7 sudo rm -rf tmpfs
 8 sudo rm -rf ramdisk*
 9 sudo losetup -d /dev/loop0
10 sudo losetup /dev/loop0 ./fs_vexpress_1G.img
11 sudo partprobe /dev/loop0
12
13 sudo mkdir rootfs
14 sudo cp ${thiry_part}/Busybox/aarch32/_install/*  rootfs/ -raf
15
16 sudo mkdir -p rootfs/proc/
17 sudo mkdir -p rootfs/sys/
18 sudo mkdir -p rootfs/tmp/
19 sudo mkdir -p rootfs/root/
20 sudo mkdir -p rootfs/var/
21 sudo mkdir -p rootfs/mnt/
22
23 sudo cp etc rootfs/ -arf
24
25 sudo cp -arf ${cross_compile}/arm-2014.05/arm-none-linux-gnueabi/libc/lib rootfs/
26
27 #Python3
28 sudo mkdir -p rootfs/usr
29 pushd rootfs/usr
30 sudo cp  -raf /home/pengdonglin/disk_ext/Python/Python3/aarch32/bin .
31 sudo cp  -raf /home/pengdonglin/disk_ext/Python/Python3/aarch32/lib .
32 sudo cp  -raf /home/pengdonglin/disk_ext/Python/Python3/aarch32/include .
33 sudo cp  -raf /home/pengdonglin/disk_ext/Python/Python3/aarch32/share .
34
35 #Python2
36 sudo cp  -raf /home/pengdonglin/disk_ext/Python/Python2/aarch32/bin .
37 sudo cp  -raf /home/pengdonglin/disk_ext/Python/Python2/aarch32/lib .
38 sudo cp  -raf /home/pengdonglin/disk_ext/Python/Python2/aarch32/include .
39 sudo cp  -raf /home/pengdonglin/disk_ext/Python/Python2/aarch32/share .
40 popd
41
42 #SQlite3
43 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/SQlite3/aarch32/bin/* rootfs/bin/
44 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/SQlite3/aarch32/include/* rootfs/include/
45 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/SQlite3/aarch32/lib/* rootfs/lib/
46 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/SQlite3/aarch32/share/* rootfs/usr/share
47
48 #Readline
49 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/Readline/aarch32/include/ rootfs/include/
50 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/Readline/aarch32/lib/* rootfs/lib/
51
52 #Zlib
53 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/Zlib/aarch32/include/* rootfs/include/
54 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/Zlib/aarch32/lib/* rootfs/lib/
55
56 #BeautifulSoup4
57 sudo cp -raf /home/pengdonglin/disk_ext/Python/BeautifulSoup4/beautifulsoup4-4.5.3/bs4  rootfs/usr/lib/python2.7/site-packages
58 sudo cp -raf /home/pengdonglin/disk_ext/Python/BeautifulSoup4/beautifulsoup4-4.5.3/py3k/bs4  rootfs/usr/lib/python3.6/site-packages
59
60 #Requests
61 sudo cp -raf /home/pengdonglin/disk_ext/Python/Requests/requests-2.3.0/requests  rootfs/usr/lib/python2.7/site-packages
62 sudo cp -raf /home/pengdonglin/disk_ext/Python/Requests/requests-2.3.0/requests  rootfs/usr/lib/python3.6/site-packages
63
64 #Boa
65 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/WebServer/Boa/boa-0.94.13/src/boa rootfs/bin
66 sudo mkdir -p rootfs/usr/lib/boa
67 sudo cp -raf /home/pengdonglin/disk_ext/Third_Part/WebServer/Boa/boa-0.94.13/src/boa_indexer rootfs/usr/lib/boa
68 sudo mkdir -p rootfs/var/www/cgi-bin
69 sudo mkdir -p rootfs/var/log/boa
70
71 sudo rm -rf rootfs/lib/*.a
72 sudo arm-none-linux-gnueabi-strip rootfs/lib/* rootfs/bin/*
73 sudo arm-none-linux-gnueabi-strip rootfs/usr/lib/boa/*
74 sudo arm-none-linux-gnueabi-strip rootfs/usr/lib/*
75 sudo arm-none-linux-gnueabi-strip rootfs/usr/bin/*
76 sudo arm-none-linux-gnueabi-strip rootfs/bin/*
77
78 sudo mkdir -p rootfs/dev/
79 sudo mknod rootfs/dev/tty1 c 4 1
80 sudo mknod rootfs/dev/tty2 c 4 2
81 sudo mknod rootfs/dev/tty3 c 4 3
82 sudo mknod rootfs/dev/tty4 c 4 4
83 sudo mknod rootfs/dev/console c 5 1
84 sudo mknod rootfs/dev/null c 1 3
85
86 sudo mkdir ./tmpfs/
87 sudo mount -t ext4 /dev/loop0p1 ./tmpfs/
88 sudo rm -rf ./tmpfs/*
89 sudo cp -raf rootfs/* ./tmpfs/
90
91 sleep 2
92 sudo umount ./tmpfs/
93
94 sudo losetup -d /dev/loop0

3、测试

 1 [root@vexpress ]# python3
 2 Python 3.6.0 (default, May  6 2017, 00:08:14)
 3 [GCC 4.8.3 20140320 (prerelease)] on linux
 4 Type "help", "copyright", "credits" or "license" for more information.
 5 >>> import requests
 6 >>>
 7 [root@vexpress ]# python2
 8 Python 2.7.13 (default, May  6 2017, 00:11:41)
 9 [GCC 4.8.3 20140320 (prerelease)] on linux2
10 Type "help", "copyright", "credits" or "license" for more information.
11 >>> import requests
12 >>> 

三、编写python程序获取开关状态
get_switch.py2:
 1 #!/usr/bin/env python2
 2
 3 import requests
 4 import time
 5
 6 apiurl = "http://api.yeelink.net/v1.0/device/7445/sensor/405914/datapoints"
 7 apiheaders = {'U-ApiKey':'3957bd54eaddd2fda1f35841d52776d9'}
 8
 9 while True:
10     r = requests.get(apiurl, headers=apiheaders)
11     print(r.text)
12     sw = r.json()
13     if sw['value'] == 1:
14         print("Switch On")
15     elif sw['value'] == 0:
16         print("Switch Off")
17     time.sleep(2)

get_switch.py3:
 1 #!/usr/bin/env python3
 2
 3 import requests
 4 import time
 5
 6 apiurl = "http://api.yeelink.net/v1.0/device/7445/sensor/405914/datapoints"
 7 apiheaders = {'U-ApiKey':'3957bd54eaddd2fda1f35841d52776d9'}
 8
 9 while True:
10     r = requests.get(apiurl, headers=apiheaders)
11     print(r.text)
12     sw = r.json()
13     if sw['value'] == 1:
14         print("Switch On")
15     elif sw['value'] == 0:
16         print("Switch Off")
17     time.sleep(2)

四、测试
运行测试程序,然后在手机客户端或在网页端修改开关的状态,测试程序会联网获得开关的状态:
完。

Yeelink初步体验相关推荐

  1. mysql connector api_mysql connector c++ 1.1 API初步体验

    mysql connector c++ 1.1 API初步体验 1,常用的头文件 #include #include #include #include #include #include 2,创建连 ...

  2. 初步体验数据驱动之美---TreeView

    1.前言 继上一篇<WPF应用基础篇---TreeView>的发布之后,有部分朋问我关于里面一些基础应用的问题,可能是我写得不够详细,所以在这里,我想再次那文章中的案例来谈谈初步体验数据驱 ...

  3. Docker Compose 简介、安装、初步体验

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  4. 百度无线音乐盒刷打印服务器,百度 M-100 无线音乐盒 初步体验+简单拆解

    百度 M-100 无线音乐盒 初步体验+简单拆解 2014-01-23 13:26:55 18点赞 26收藏 15评论 前段时间京东上面这个盒子做活动,虽然手头蓝牙音箱啥子的也有几个,不过受到这个盒子 ...

  5. 乐为物联网平台初步体验(1)

    作者 彭东林 pengdonglin137@163.com 环境 Qemu: 2.8.0 开发板: vexpress-ca9 概述 前面我们体验了一下Yeelink物联网平台,下面我们再尝试另外一个物 ...

  6. ShardingSphere UI 初步体验

    简介 在上两篇文章中,尝试了ShardingSphere JDBC和Proxy的相关功能,本篇进行探索ShardingSphere的UI组件部分 示例运行 这个应该是一个管理配置之类的东西,国际惯例, ...

  7. Azure Data Science Virtual Machine Linux的初步体验

    背景信息 微软Azure 提供1元免费试用的活动,可以使用$200的积分额度或30天试用期(先到为准).由于之前工作的原因看过很多阿里云和微软Azure的产品文档,但一直没有使用过云计算产品,所以很多 ...

  8. 三款国产操作系统使用初步体验

    最近想选择一个Linux操作系统用来日常办公.之前用过很多Linux版本,大致可以分为CentOS系列.Debian系列,Debian系列如Ubuntu.Lubuntu.Kali Linux,Cent ...

  9. 中国移动MIFI--CM510,4G TD-LTE MIFI 上网终端开箱及初步体验@上海

    上海的,前期在4G官网报名专页登记了http://www.10086.cn/lte/recruit.html 当时由于报名结束了,所以先注册登记了信息. 1.15号中午收到10086的短信邀请,立马报 ...

最新文章

  1. CCAI 2020 | 黄铁军:“仿真主义”下的人工智能发展之路
  2. mysql 自动重启 计划_解决MYSQL死机,定时重启MYSQL,wdcp计划任务设定方法,
  3. SwipeRefreshLayout和RecyclerView滑动冲突的解决
  4. Terminal(终端)中代理的配置---Linux应用中遇到的问题笔记
  5. python 计时_Python time clock()方法
  6. 【Java】常见的异常和Throwable类
  7. 电脑主板接口_PCI接口借尸还魂?精英发布新款B450电脑主板,配备老式PCI接口...
  8. linux开机启动详细流程图
  9. python web开发c6——阿里云上ubuntu+flask+gunicorn+nginx服务器部署(一)简单测试
  10. H5 js 处理localstorage方法封装
  11. 条件变量、pthread_cond_init
  12. shineblink 雨滴感应传感器
  13. C语言_字符串转数字
  14. 代表JAVA线程优先级的常量是_Java 线程优先级
  15. oracle数据库中的回收站,Oracle回收站的清理方法
  16. 华为OD机试题:按区间反转文章片段
  17. 有没有发现不会写简历,感觉什么都不会?其实写简历也是一种艺术。
  18. 了解 Qt 绘图设备QPixmap、QBitmap、QImage和 QPicture
  19. Linux进阶之路-Ubuntu版
  20. 一次硬盘问题引起的服务器宕机

热门文章

  1. nodejs版本更新问题:express不是内部或外部命令
  2. 关于VS 2008和.NET 3.5 Beta2新特性介绍
  3. 传输层协议的UDP和TCP
  4. MySQL工具介绍及环境搭建
  5. 百度联盟广告代码php,百度联盟原生广告的投放步骤
  6. 虚拟机服务器被攻击,Linux服务器被攻击用来挖矿了
  7. php ajax实现上移,jquery实现标签上移、下移、置顶_jquery
  8. python中和js交互_python和js交互调用的方法
  9. 学习web前端还是UI?先了解Web前端和UI的区别是什么?在选择
  10. 锐度越高越好吗_德国瑞好和德国GC地暖哪个好