社区导航

 

搜索
查看: 84|回复: 0

[原创] 【NXP Rapid IoT评测】+笔记本蓝牙与Rapid IOT交互

[复制链接]

244

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-1-12 09:13:05 | 显示全部楼层 |阅读模式
本帖最后由 flyword 于 2019-1-12 18:37 编辑

本人这次评测的最终目的是简单的实现一个web应用,通过远程访问web,来获得环境传感器的参数。之前试用了一下NXP官方的web IDE环境,使用流程见之前发的一篇帖子。一般来说NXP的方案是在手机蓝牙连接到套件的时候完成对数据的采集并上传到云端,当然也可以开启thread功能,利用官方出的thread网关,将数据采集和上传。

对于我这次的测评而言,需要将数据单独采集出来,并通过自己搭建的web,实现网络访问数据和控制的功能。初步的思路是利用NXP的WEB IDE来编写IOT端的底层程序,采集并发送我所期望的数据,通过与带蓝牙功能的linux系统(例如树莓派等)交互,完成传感器数据的采集,而后可以将数据传送到我本地搭建的服务器或者通过mqtt协议传递到远程公网服务器,实现数据的发布。

这次主要使用的是对bluez用Python封装后的蓝牙包:bluepy,优势是可以很方便的实现蓝牙数据交互。相关安装方法及使用参考网址如下:
https://github.com/IanHarvey/bluepyhttp://ianharvey.github.io/bluepy-doc/
本次测评,本人采用的是装有ubuntu 16.04 LTS的笔记本测试的,笔记本自带蓝牙4.0。

下面是简单的获取IOT硬件端数据代码
  1. #!/usr/bin/python
  2. #coding=utf-8

  3. import sys
  4. import bluepy
  5. from btle import UUID,Peripheral
  6. import struct

  7. #dev_name_uuid=UUID(0x2a00)
  8. dev_name_uuid=UUID("db66f136-c3db-4929-af23-483b29ac8490")

  9. if len(sys.argv)!=2:
  10.         print "Fatal,must pass device address",sys.argv[0],"<device address="">"
  11.         quit()

  12. p=Peripheral(sys.argv[1],"public")

  13. try:
  14.         ch=p.getCharacteristics(uuid=dev_name_uuid)[0]
  15.         if(ch.supportsRead()):
  16.                 print ch.read().split()
  17.                 print "value:"
  18.                 print struct.unpack('<I',ch.read())

  19. finally:
  20.         p.disconnect()
复制代码


程序运行后可以获得数据结果,如图获取了13的数据,截图如下:
交互结果.png

这样就完成了蓝牙数据上传的第一步,将蓝牙的数据读取出来了。


另外也实现了蓝牙控制led的功能,这里首先要在web IDE中编写好IOT的程序。具体的程序截图如下,IOT端设置很简单。
IOT end.png
APP端的配置:
APP end.png


通过笔记本电脑蓝牙与rapid IOT互动的python脚本程序如下,供大家参考,程序可能有漏洞,欢迎大家指正。
  1. #!/usr/bin/python
  2. #coding=utf-8

  3. import sys
  4. import bluepy
  5. from btle import UUID,Peripheral
  6. import struct

  7. #dev_name_uuid=UUID(0x2a00)
  8. dev_name_uuid=UUID("57df9b56-ed8d-4c47-bea4-714c51536cd4") #UUID号,这个是光照
  9. led_name_uuid=UUID("57df9b56-ed8d-4c47-bea4-714c51536cd5") #led灯的

  10. if len(sys.argv)!=3:
  11.         print "Fatal,must pass device address",sys.argv[1],"<device address="">"
  12.         print "Fatal,must pass led command:on or off",sys.argv[2],"<led command="">"
  13.         quit()

  14. p=Peripheral(sys.argv[1],"public")

  15. try:
  16.         ch=p.getCharacteristics(uuid=dev_name_uuid)[0]
  17.         print ch
  18.         if(ch.supportsRead()):
  19.                 #print ch.read().split()
  20.                 print "Light value:",struct.unpack('<I',ch.read())[0]," lx"

  21.         led=p.getCharacteristics(uuid=led_name_uuid)[0]
  22.         print "led read value:",led.read()
  23.         led_status=(struct.unpack('c',led.read()))[0]
  24.         #print led_status
  25.         if(led_status=="1"):
  26.                 print "the led is on at present!"
  27.                 if(sys.argv[2]=='on'):
  28.                         pass #led on
  29.                         #print "turn on led"
  30.                 elif(sys.argv[2]=="off"):
  31.                         led.write(struct.pack('c','0'),withResponse=True) #led off
  32.                         print "turn off led"
  33.         if(led_status=='0'):
  34.                 print "the led is off at present!"
  35.                 if(sys.argv[2]=='on'):
  36.                         led.write(struct.pack('c','1'),withResponse=True) #led on
  37.                         print "turn on led"
  38.                 elif(sys.argv[2]=="off"):
  39.                         pass #led off
  40.                         #print "turn off led"
  41. finally:
  42.         p.disconnect()
复制代码


运行截图如下:
最终互动程序.png

如果有兴趣的可以试试这个程序,我感觉之所以叫做rapid IOT,很大一方面是IOT硬件编程比较简单,而手机APP端要想弄好,还得考虑界面的美化问题,云端的设置也比较有一定的局限性。
附件是IOT的程序,有兴趣的可以看看。
LIGHT BLE firmware.bin (389.71 KB, 下载次数: 0)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-1-21 20:13 , Processed in 0.105902 second(s), 20 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表