MYS-6ULX-IOT 开发板测评——实现简单的物联网应用

作者: 阿基米东
上传时间为: 2018-06-26 09:06 AM
2018-06-26
阅读:

  前面,我们在 MYS-6ULX-IOT 开发板上成功地驱动了 RTL8188 WiFi 模块,也为 MYS-6ULX-IOT 的系统增加了 curl 命令。接下来,我们就来通过这个 WiFi 模块连接云端实现一个最简单的物联网应用。


提供 Web API

  在本示例中,我的 web 服务器部署在阿里云上,大家也可以通过局域网内的服务器进行实验。

  Web 服务器实现了 HTTP 和相关的 TCP 连接处理,同时具有 web 资源管理等功能。常见的 Web 服务器有 Nginx、Apache、IIS(Windows),而嵌入式领域则通常采用轻量级的 lighttpd、thttpd、minihttpd 等等。

  这里,我们实现一个物联网的点灯实验。在我的服务器上创建了一个 JSON API,它的内容如下:

{
        "led": true
}

  在 MYS-6ULX-IOT 端,我们尝试用 curl 去获取这个 API:

# curl <a href="https://www.luckydarcy.top/2018/iot/api.json">https://www.luckydarcy.top/2018/iot/api.json</a> {
        "led": true
}

  很棒,看起来已经获取到云端数据了!


Python 实现连接

  实际上,上述的 api.json 为我们提供的是 LED 的状态信息,我们的目的是让设备通过 Web API 实现 LED 的亮/灭操作。因此,我们要编写程序实现 HTTP 请求,并从中解析 LED 的状态。

  MYS-6ULX-IOT 的 Base 系统已经包含了 Python2.7,那么简单起见,我们这里用 Python 来实现。示例程序如下:

# cat led.py
import urllib2
import json
import os, time

while True:

        results = urllib2.urlopen('<a href="https://www.luckydarcy.top/2018/iot/api.json')">https://www.luckydarcy.top/2018/iot/api.json')</a>.read()
        status = json.loads(results)['led']
        if status == True:
                print "Light ON"
                os.system("echo 1 > /sys/class/leds/user/brightness")
        else:
                print "Light OFF"
                os.system("echo 0 > /sys/class/leds/user/brightness")

        time.sleep(3)

  首先使用 urllib2.urlopen 发起 HTTP 请求;然后使用 json.loads 解析 api.json,获取 LED 状态值;最后通过 os.system 调用本地 Shell 命令,对 LED 的文件 I/O 进行操作。为了降低请求频率,对每次请求增加了3秒的延时。

  好啦,我们在 MYS-6ULX-IOT 开发板运行 python led.py 看看。


安装 json 模块

  很遗憾,出现了 “ImportError: No module named json” 这样的错误,显然是因为当前系统没有 json 模块所造成的。然而,也没有 pip,所以我们需要手动安装 json 模块了。

  登录 https://pypi.org/ 查找 json 模块,这里我们安装的是 simplejson,选择下载源代码 simplejson-3.15.0.tar.gz。

  在 MYS-6ULX-IOT 开发板上解压缩 simplejson-3.15.0.tar.gz,进入目录 simplejson-3.15.0,然后执行以下命令安装即可:

python setup.py install

测试

  别忘了,我们还要将 import json 修改为 import simplejson as json

  然后再次执行,可以看到终端打印“Light ON”,并且 MYS-6ULX-IOT 开发板上的蓝色 USER LED 亮起来了。登录服务器将 api.json 修改为 "led": false,此时终端打印“Light OFF”,并且 LED 灭。

# python led.py 
Light ON
Light ON
Light ON
Light OFF
Light OFF

  嗯哈!这样,我们就实现了一个简单的物联网应用啦~

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示