0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

人工智能应用实操:Python控制IoT智能硬件的教程

智能物联研习社 来源:涂鸦智能 作者:智能物联研习社 2020-12-09 11:34 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

人工智能机器学习的火热,将Python语言的热度带到了一个新高度,朋友圈经常刷到的Python小课,甚至让很多非技术的同学一度怀疑,不会点Python都不好意思说自己是现代人。关于Python的基础知识,网上内容很多,感兴趣的都可以找到大量资料学习。本篇文章,我主要从一些读者关注的问题出发,比如在各种IoT智能设备普及的今天,如何利用Python去控制智能硬件,实现一些功能演示呢?比如我们可以利用Python控制灯泡的开关、亮度调节、颜色变化等等。

实际上,这些控制硬件设备的能力,并不需要你完全自己去开发程序实现,通过现成的平台,通过简单的Python代码编程,就可以实现智能设备的控制和交互,真正让你掌握软件和硬件能力的打通。下面,我会利用涂鸦云开发平台手把手教你如何使用该平台并通过 Python 调用相关 API 控制一款智能设备。利用涂鸦云开发平台,您可以获取涂鸦 IoT 平台 OpenAPI 的调用权限。通过简单的代码编程就可以轻易控制 Powered By Tuya 智能设备。

物料清单

硬件:一款智能硬件设备,任何 Powered By Tuya 设备皆可,您也可以前往涂鸦智选平台采购样品。

软件:一款 Python IDE,例如 PyCharm、VS Code、IDLE 等

步骤

第 1 步:创建云开发项目

想要使用涂鸦API,您需要先在 涂鸦云开发平台 创建一个项目。

创建成功后,在项目详情页面,您可以获得授权密钥(Access ID 和 Access Secret 的组合)。请复制出来妥善保管,调用 API 时您需要用到授权密钥。

第 2 步:关联设备到项目

使用涂鸦 OpenAPI 主要是为了控制智能设备,所以我们需要先将设备关联到云开发项目中。

设备关联方式

涂鸦提供了4种关联设备的维度:

由于前 3 种需要您开发智能硬件产品或移动应用,为了快速体验 IoT 应用构建流程,本文使用第 4 种方式关联设备关联。

推荐方式一:使用涂鸦智能 App 添加智能设备

推荐方式二:添加虚拟设备

如果您没有可用的 Powered By Tuya 设备,您还可以通过添加虚拟设备来完成调试。关联产品下的设备:通过产品 PID 关联您开发的智能设备。关联微信小程序配网添加的设备:通过 App schema 关联您开发的小程序下的设备。关联 App 配网添加的设备:通过 App schema 关联您开发的 App 下的设备。关联 App 账号下的设备:通过使用涂鸦智能 App 关联您的 IoT 账号里配网的设备。手机里安装涂鸦智能 App 或智能生活 App。

将智能设备配网到 App。打开云开发 关联设备 页面。选择关联 App 账号下的设备页签。使用涂鸦智能 App 进行扫码即可将账号下的所有设备授权给云开发项目使用。智能设备关联到云开发项目后,您可以在设备管理>设备列表查看到通过各种方式关联的设备。添加完成后,可以先将设备 ID 复制出来备用,假设您获取的设备 ID 为6c7asa9b55fs632c12zcwy。

打开云开发 虚拟设备 页面。选择添加虚拟设备。选择一款产品,然后选择添加虚拟设备>关联到涂鸦 App 账号。使用涂鸦智能 App 进行扫码即可将账号下的虚拟设备授权给云开发项目使用。虚拟设备都被独立放置在设备管理>虚拟设备页面。添加完成后,可以先将设备 ID 复制出来备用,假设您获取的虚拟设备 ID 为 vdevo160544422718591。

第 3 步:申请 API 调用权限

涂鸦 IoT 平台 OpenAPI 默认是非开通状态,您需要以分组为单位发起 API 开通申请方可使用。如果您调用未开通的 API,将产生权限不足的调用错误。本文操作中,您需要在 云开发 API 分组页面 申请的 API 分别为授权管理、设备管理、设备控制。

至此,在涂鸦云开发平台上的准备工作已经完成,接下来请选择任意一个Python IDE 进行接下来的编程实践。

第 4 步:调用 API 控制设备

本步骤中所有涉及的 Python 代码已经打包生成为 python_iot_code_sample.py,您可以提前下载使用。

4.1 获取 access_token

涂鸦 IoT 采用 HMAC-SHA256 创建摘要,根据不同应用场景,云开发平台提供两套签名算法。其中,令牌管理接口(获取令牌、刷新令牌)算法如下:

sign = HMAC-SHA256(client_id + t, secret).toUpperCase()

以下为对应的 Python 应用代码逻辑:

#从云开发项目获得的授权密钥client_id='3meqtq4x9wr22a90lee4'secret='7b121dd8196043f3b6944250fa3ad4ab'#各接口使用方请根据自身所在区域调用相应接口。#中国区https://openapi.tuyacn.com#美洲区https://openapi.tuyaus.com#欧洲区https://openapi.tuyaeu.com#印度区https://openapi.tuyain.combase='https://openapi.tuyacn.com'#签名算法函数defcalc_sign(msg,key): importhmacimporthashlib sign=hmac.new(msg=bytes(msg,'latin-1'),key=bytes(key,'latin-1'),digestmod=hashlib.sha256).hexdigest().upper()returnsignimporttimeimportrequests t=str(int(time.time()*1000)) r=requests.get(base+'/v1.0/token?grant_type=1', headers={'client_id':client_id,'sign':calc_sign(client_id+t,secret),'secret':secret,'t':t,'sign_method':'HMAC-SHA256', }) res=r.json()['result'] print(res)

4.2 编写通用请求函数

所有业务 API 都需要带公共参数,为了避免重复繁琐的操作,建议您编写 GET 和 POST 请求,方便后续使用。同时,业务接口的签名算法与之前步骤中获取 Token 时使用的不同,算法如下:

sign = HMAC-SHA256(client_id + access_token + t, secret).toUpperCase()

以下为对应的 Python 应用代码逻辑:

importjson#get请求函数defGET(url,headers={}): t=str(int(time.time()*1000)) default_par={'client_id':client_id,'access_token':res['access_token'],'sign':calc_sign(client_id+res['access_token']+t,secret),'t':t,'sign_method':'HMAC-SHA256', } r=requests.get(base+url,headers=dict(default_par,**headers)) r=json.dumps(r.json(),indent=2,ensure_ascii=False)#美化request结果格式,方便打印查看 returnr#post请求函数defPOST(url,headers={},body={}): importjson t=str(int(time.time()*1000)) default_par={'client_id':client_id,'access_token':res['access_token'],'sign':calc_sign(client_id+res['access_token']+t,secret),'t':t,'sign_method':'HMAC-SHA256', } r=requests.post(base+url,headers=dict(default_par,**headers),data=json.dumps(body)) r=json.dumps(r.json(),indent=2,ensure_ascii=False)#美化request结果格式,方便打印查看 returnr

4.3 双向控制设备

通过 获取设备最新状态 的 API,您可以获得设备的最新状态,需要使用设备 ID 作为参数调用 API。以下为对应的 Python 应用代码逻辑:

#云开发项目里关联设备的IDdevice_id='65057368c44f3380cc4b'r=GET(url=f'/v1.0/devices/{device_id}/status') print(r)

返回结果示例如下所示,更多详情,请参考智能设备的 指令集:

{"result":[ {"code":"switch","value":true }, {"code":"countdown_1","value":0 }, {"code":"cur_current","value":68 }, {"code":"cur_power","value":3 }, {"code":"cur_voltage","value":2125 } ],"success":true,"t":1606880360840}

在控制一个未知的设备之前,有时您并不知道可以下发哪些指令来控制设备。这时就可以先用这个 API 获得这个设备所有可用的控制指令,然后再下发具体指令来控制设备。

r=GET(url=f'/v1.0/devices/{device_id}/functions') print(r)

以智能插座为例,返回结果示例如下:

{"result":{"category":"cz","functions":[ {"code":"switch","desc":"[插座]开关","name":"开关","type":"Boolean","values":"{}" }, {"code":"countdown_1","desc":"开关1倒计时","name":"开关1倒计时","type":"Integer","values":"{"unit":"s","min":0,"max":86400,"scale":0,"step":1}" } ] },"success":true,"t":1606880309547}

获取到设备指令集后,您可以调用 下发设备指令 API 来控制智能设备。

#根据该设备的控制指令集组装参数d={"commands":[{"code":"switch","value":True},]} r=POST(url=f'/v1.0/devices/{device_id}/commands',body=d) print(r)

返回结果示例:

{"result":true,"success":true,"t":1606880463013}

详情 :基于涂鸦云开发平台的 Python IoT 开发实践 (tuya.com)

小结

本文介绍了如何使用 Python 基于涂鸦云开发平台,调用基础 API 控制一个智能设备。由于 Powered By Tuya 设备体系严格的统一性,您可以将这个控制方式拓展到所有 Powered By Tuya 设备中。让您无需考虑设备异构性,能够快速构建 IoT 应用和服务。

fqj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1813

    文章

    49734

    浏览量

    261477
  • IOT
    IOT
    +关注

    关注

    189

    文章

    4369

    浏览量

    206555
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    智能出席国际青年创新大会人工智能论坛

    国际青年创新大会于10月20日下午在深圳国际会展中心银河会场震撼开启。达智能联合创始人吕枫受邀参会,并在人工智能论坛分享了公司AI技术在企业园区领域的创新实践。
    的头像 发表于 10-22 12:37 549次阅读

    标贝科技参编《人工智能高质量数据集建设指南》

    联盟数据委员会共同发布《人工智能高质量数据集建设指南》,旨在为业界建设高质量数据集提供有价值的指导和参考。标贝科技深度参与指南的编制工作,将产业实践经验转化为标准框架,为行业洞察与产业实践贡献专业力量
    的头像 发表于 09-11 17:19 679次阅读

    利用超微型 Neuton ML 模型解锁 SoC 边缘人工智能

    应用。 为什么选择 Neuton 作为开发人员,在产品中使用边缘人工智能的两个最大障碍是: ML 模型对于您所选微控制器的内存来说太大。 创建自定义 ML 模型本质上是一个手动过程,需要高度的数据科学知识
    发表于 08-31 20:54

    挖到宝了!人工智能综合实验箱,高校新工科的宝藏神器

    ,技术自主可控 在如今这个科技竞争激烈的时代,国产化硬件的重要性不言而喻。比邻星人工智能综合实验箱就做到了这一点,采用国产化硬件,积极推进全行业产业链上下游环节的国产化进程,把国产自主可控的软
    发表于 08-07 14:30

    挖到宝了!比邻星人工智能综合实验箱,高校新工科的宝藏神器!

    ,技术自主可控 在如今这个科技竞争激烈的时代,国产化硬件的重要性不言而喻。比邻星人工智能综合实验箱就做到了这一点,采用国产化硬件,积极推进全行业产业链上下游环节的国产化进程,把国产自主可控的软
    发表于 08-07 14:23

    华清远见AI人工智能专业实验室建设方案,虚实融合,以产业应用驱动高校教学训变革!

    人工智能技术迭代提速的当下,高校教学正面临着技术落地与人才培养的双重挑战。作为高校教师,我们常常会遇到这样的困境:课本知识跟不上技术发展速度,实验室硬件难以支撑复杂项目训,产教融合缺乏实际落地
    的头像 发表于 07-31 15:14 1566次阅读
    华清远见AI<b class='flag-5'>人工智能</b>专业实验室建设方案,虚实融合,以产业应用驱动高校教学<b class='flag-5'>实</b>训变革!

    超小型Neuton机器学习模型, 在任何系统级芯片(SoC)上解锁边缘人工智能应用.

    Neuton 是一家边缘AI 公司,致力于让机器 学习模型更易于使用。它创建的模型比竞争对手的框架小10 倍,速度也快10 倍,甚至可以在最先进的边缘设备上进行人工智能处理。在这篇博文中,我们将介绍
    发表于 07-31 11:38

    智能人工智能智能制造专业委员会委员

    近日,达智能收到来自深圳上市公司协会颁发的证书,凭借在人工智能技术研发与应用领域的实践成果,当选深上协“人工智能智能制造专业委员会”委员
    的头像 发表于 07-29 16:36 664次阅读

    迅为RK3588开发板Linux安卓麒麟瑞芯微国产工业AI人工智能

    迅为RK3588开发板Linux安卓麒麟瑞芯微国产工业AI人工智能
    发表于 07-14 11:23

    最新人工智能硬件培训AI基础入门学习课程参考2025版(离线AI语音视觉识别篇)

    视觉开发板开箱即用的离线AI能力,分类列出学习课程知识点和参考,希望能够帮助大家快速掌握离线 AI 智能硬件的基础知识与实战技能,同时了解相关AI技术在实际场景的应用情况。正文按入
    发表于 07-04 11:14

    最新人工智能硬件培训AI 基础入门学习课程参考2025版(大模型篇)

    人工智能大模型重塑教育与社会发展的当下,无论是探索未来职业方向,还是更新技术储备,掌握大模型知识都已成为新时代的必修课。从职场上辅助工作的智能助手,到课堂用于学术研究的智能工具,大模型正在工作生活
    发表于 07-04 11:10

    华清远见AI人工智能专业实验室建设方案,以产业应用驱动高校教学训变革!

    人工智能技术迭代提速的当下,高校教学正面临着技术落地与人才培养的双重挑战。作为高校教师,我们常常会遇到这样的困境:课本知识跟不上技术发展速度,实验室硬件难以支撑复杂项目训,产教融合缺乏实际落地
    的头像 发表于 06-27 13:45 1218次阅读
    华清远见AI<b class='flag-5'>人工智能</b>专业实验室建设方案,以产业应用驱动高校教学<b class='flag-5'>实</b>训变革!

    开售RK3576 高性能人工智能主板

    ,HDMI-4K 输出,支 持千兆以太网,WiFi,USB 扩展/重力感应/RS232/RS485/IO 扩展/I2C 扩展/MIPI 摄像头/红外遥控 器等功能,丰富的接口,一个全新八核拥有超强性能的人工智能
    发表于 04-23 10:55

    NXP技术白皮书:AIoT人工智能物联网 将人工智能与现实世界相连

      分析师将人工智能物联网 (AIoT) 大致定义为人工智能 (AI) 与物联网(IoT)的融合,利用AI让物联网设备变得更智能、更具自主性。但这是一个以设备为中心的“小数据”的定义。
    的头像 发表于 03-28 11:53 1818次阅读
    NXP技术白皮书:AIoT<b class='flag-5'>人工智能</b>物联网 将<b class='flag-5'>人工智能</b>与现实世界相连

    什么是嵌入式人工智能

    嵌入式人工智能是指将人工智能技术应用于嵌入式系统中的一种技术。嵌入式系统是嵌入到其他设备或系统中的计算机系统,通常用于控制、监测或执行特定任务,如智能手机、
    的头像 发表于 12-11 09:23 1518次阅读
    什么是嵌入式<b class='flag-5'>人工智能</b>