• [线上活动] 【开天aPaaS有奖征文】开发者集结!体验开天aPaaS平台,赢智能安防家庭套装(投稿截止)
    【摘要】 体验开天aPaaS平台,征集利用开天aPaaS集成工作台,调用API构建丰富应用相关的体验文章,赢智能家庭套装大奖。尊敬的各位博主,开天aPaaS平台现已升级完毕,重新开启免费体验申请,补偿活动时间15天,8.24截止。华为云开天aPaaS,是华为云与伙伴共建共享的行业经验聚合与开放平台。它将与伙伴联合沉淀的技术和解决方案等资产,进行标准化输出,做成“可被调用的API服务”,开放给行业开发者和客户调用,以实现经验即服务。在使能行业场景化创新的同时,达到与客户、开发者以及伙伴的合作共赢。面向开发者,开天aPaaS平台提供“可被调用的API服务”,提供一站式的开发框架和能力,让您可以快速集成各类应用,享受极致的开发和使用体验。为了让更多开发者了解开天aPaaS,使用开天aPaaS工作台,特举办《开发者集结,体验开天aPaaS工作台》征文活动。此次征文活动奖品丰厚,不仅有华为智选豪恩智能安防家庭套装、华为智选海雀智能摄像头,还有华为手环及华为定制礼品等,只要在社区博客发表与开天aPaaS平台相关的文章就可轻松获得。有点心动?看看详细规则吧:(投稿截止时间补偿到8.24)免费体验入口&操作指导【开天aPaaS工作台火热公测中】1-新手任务操作指导:利用模板创建流(申请公测这里要注意下,就是先进入申请公测的页面,提交信息后,刷新了进入开通工作台的界面,部分开发者会以为没申请成功,其实是正常的)【开天aPaaS工作台火热公测中】2-基础任务操作指导:使用连接器从零开始创建流【开天aPaaS工作台火热公测中】3-进阶任务操作指导:导入API并创建流我们需要哪些主题的稿件?原则上,我们欢迎所有能帮助学习开天aPaaS平台相关的文章!如基于自己的实际使用经验,分享对aPaaS的技术分析、使用感受及在项目实战中的经验等。如果你还不知道该怎么写,请你参看阅读下面1-3篇文章,可以让你更快上手(最终呈现效果类似这样):【愚公系列】手把手教你用搭一个WeLink上的出差应用丨【AppCube X WeLink双剑合璧】AppCube低代码快速开发健康打卡应用丨【AppCube X WeLink双剑合璧】人工智能之华为云ModelArts的深度使用体验与AI Gallery应用开发实践丨【华为云AI贺新年】你将获得什么?我们会把收到的优质内容汇编成册,并注明原作者,积累行业口碑,开放给圈内开发者下载查阅,提供实践参考。对于贡献优质内容的作者,我们还将送出各项大礼!同时,在华为云站内外10+个技术社区醒目位置进行推荐,给与百万级流量资源。优质作者更可获得长期约稿和更多内容合作机会。评奖规则说明华为云开发者社区、华为云开天aPaaS平台将联合评审此次征文。专家评分依据 :文章篇幅、技术含金量、排版美观度、阅读量、点赞、收藏等指标综合评分。其他说明 :1、一二三等奖不能叠加。2、一二三等奖可与创作小能手奖叠加。3、征文投稿数量不计入月度激励活动文章数量。在哪里投稿?文章需要发表在社区博客; 是时候展现真正的技术了, 点击前往发布标题以 【开天aPaaS大作战】结尾,例如:我用开天平台做了一个天气预报系统【开天aPaaS大作战】。文章末尾需加上活动名称及链接地址:【开天aPaaS大作战】有奖征文火热进行中:cid:link_7此外,在(cid:link_0)提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。(此次活动文末加上面两句话,需要注意↑↑)文章跟华为云产品相关,所以需要同时加上【云端实践】标签如果大家在征文中遇到有关华为云产品体验方面的问题建议,请到【云声平台】提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。有哪些需要注意的:1、文章内容需体现技术看点,图文并茂,建议字数在500字以上;2、文章要求为投稿人原创,凡转载或抄袭一经发现将取消参赛资格;3、文章须在华为云社区为首发,如华为云平台已有文章内容则视为稿件无效;4、稿件投稿后,华为云拥有该稿件的使用权、修改权等;5、因库存等原因,奖品可能会替换为等值礼品。快来华为云社区博客,一起遨游在技术的海洋中吧! 点击立即体验如果有任何问题,可扫描下方二维码咨询。添加微信时请备注:报名活动时使用的华为云昵称!扫码添加小助手:
  • [云实验室] 深入浅出的玩转华为云KooLabs【玩转华为云】
    【摘要】 华为云官方实验平台,一键创建实验环境,开发者通过实验手册指导,快速体验华为云服务,在云端实现云服务的实践、调测和验证,量级轻、上手快、体验好。沙箱? KooLabs?从百度上,Sandbox(又叫沙箱、沙盘)即是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。 在网络安全中,沙箱指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。在华为云中,沙箱(Sandbox):KooLabs它的特点是:在线:用户利用互联网进行访问,全球访问,全时, 全天候。远程实验室:用户访问的是华为公司建设和维护的真实的实验室环境,与现场实验室功能一致。服务:华为不仅仅提供实验室,还提供相应的技术支持,专家解答,社区讨论等配套服务。沙箱的用户管理和预约系统,保证多个用户可以有序的使用有限的资源。沙箱的自动化配置系统,保证每个用户使用沙箱都是一个初始化后的环境,前面的使用者不会影响后边的使用者。云计算1、5分钟极速建站体验https://lab.huaweicloud.com/testdetail_16452、10分钟快速入门EVShttps://lab.huaweicloud.com/testdetail_4783、30分钟轻松搭建网站应用(未完成)https://lab.huaweicloud.com/testdetail_2364、HCE-OS容器化部署OA系统https://lab.huaweicloud.com/testdetail_17265、HCE-OS安装部署与安全漏洞配置https://lab.huaweicloud.com/testdetail_17256、基于HCE-OS的FTP文件共享服务器部署https://lab.huaweicloud.com/testdetail_17237、HCE-OS基础操作https://lab.huaweicloud.com/testdetail_17218、基于HCE-OS的云原生容器实践https://lab.huaweicloud.com/testdetail_17199、HCE-OS网络、存储配置https://lab.huaweicloud.com/testdetail_171610、基于Discuz论坛实现多租户资源独立部署https://lab.huaweicloud.com/testdetail_56311、存储类服务实践https://lab.huaweicloud.com/testdetail_51912、计算类服务实践https://lab.huaweicloud.com/testdetail_50013、10分钟快速入门ECShttps://lab.huaweicloud.com/testdetail_47714、华为云云游戏解决方案场景应用及部署体验;https://lab.huaweicloud.com/testdetail_46615、基于ECS实现一分钟自动化部署https://lab.huaweicloud.com/testdetail_33416、基于SDRS对云端应用进行容灾保护(SDRS)https://lab.huaweicloud.com/testdetail_380人工智能1、使用ModelArts实现花卉图像分类https://lab.huaweicloud.com/testdetail_2872、基于深度学习算法的语音识别https://lab.huaweicloud.com/testdetail_4183、故障识别与根因定位服务实操https://lab.huaweicloud.com/testdetail_4554、基于ModelArts JupyterLab在线调优钢筋检测https://lab.huaweicloud.com/testdetail_4845、ModelArts服务应用-商超商品识别https://lab.huaweicloud.com/testdetail_17086、语音交互API服务调用https://lab.huaweicloud.com/testdetail_17117、图像识别API服务调用https://lab.huaweicloud.com/testdetail_17138、图像搜索API服务调用https://lab.huaweicloud.com/testdetail_17149、自然语言处理API服务调用https://lab.huaweicloud.com/testdetail_171510、发票验真综合应用开发https://lab.huaweicloud.com/testdetail_172011、HiLens服务应用-口罩检测https://lab.huaweicloud.com/testdetail_172212、文字识别API服务调用(OCR 体验馆)https://lab.huaweicloud.com/solutiondetail_56713、使用ModelArts中开发工具学习Python(初级)-(已下线)https://lab.huaweicloud.com/testdetail.html?testId=40014、基于ModelArts实现行人检测模型训练和部署-(已下线)鲲鹏1、鲲鹏开发套件GCC for openEuler功能支持实践https://lab.huaweicloud.com/testdetail_5642、基于鲲鹏应用使能套件进行NUMA亲和性实践https://lab.huaweicloud.com/testdetail_5323、基于鲲鹏应用使能套件实现Spark算法优化https://lab.huaweicloud.com/testdetail_5264、openEuler系统基础实践https://lab.huaweicloud.com/testdetail_5215、1小时快速入门openGauss数据库https://lab.huaweicloud.com/testdetail_5086、A-Tune智能优化引擎的部署与应用https://lab.huaweicloud.com/testdetail_5017、使用iSula生态链进行容器镜像构建和运行https://lab.huaweicloud.com/testdetail_4988、通过鲲鹏开发套件实现毕昇编译器AutoTuner自动编译调优https://lab.huaweicloud.com/testdetail_4979、基于鲲鹏应用使能套件提升分布式存储IO性能https://lab.huaweicloud.com/testdetail_49510、使用Compass-CI对开源软件进行可持续集成https://lab.huaweicloud.com/testdetail_49211、基于鲲鹏应用使能套件的加速库数学库应用指导https://lab.huaweicloud.com/testdetail_488不检测12、基于华为云鲲鹏弹性云服务器部署openGauss数据库https://lab.huaweicloud.com/testdetail_48313、基于鲲鹏应用使能套件进行MySQL性能调优https://lab.huaweicloud.com/testdetail_47514、基于鲲鹏应用使能套件进行容器部署https://lab.huaweicloud.com/testdetail_469k8s的kubeadm太新:1.23 然后obs下载的软件太老,1.1415、基于鲲鹏应用使能套件进行Hadoop调优https://lab.huaweicloud.com/testdetail_467**16、通过鲲鹏开发套件实现Hyper Tuner性能调优https://lab.huaweicloud.com/testdetail_44417、通过鲲鹏开发套件实现Java代码迁移https://lab.huaweicloud.com/testdetail_43918、通过鲲鹏开发套件实现软件包迁移https://lab.huaweicloud.com/testdetail_436**19、通过鲲鹏开发套件实现源码迁移https://lab.huaweicloud.com/testdetail_43420、在鲲鹏BMS上进行WRF部署与性能优化https://lab.huaweicloud.com/testdetail_43121、华为云鲲鹏弹性云服务器高可用性架构实践https://lab.huaweicloud.com/testdetail_41722、基于华为云鲲鹏弹性云服务器部署Web应用https://lab.huaweicloud.com/testdetail_40223、使用华为云鲲鹏弹性云服务器部署PostgreSQLhttps://lab.huaweicloud.com/testdetail_39924、使用华为云鲲鹏弹性云服务器部署Discuz!https://lab.huaweicloud.com/testdetail_39625、使用华为云鲲鹏弹性云服务器部署Node.jshttps://lab.huaweicloud.com/testdetail_33826、使用华为云鲲鹏弹性云服务器部署文字识别Tesseracthttps://lab.huaweicloud.com/testdetail_342云原生1、基于ServiceStage的微服务开发与部署(同应用服务)https://lab.huaweicloud.com/testdetail_16552、基于CCE Kubernetes编排实战https://lab.huaweicloud.com/testdetail_16543、 Kubernetes网络与持久化存储实战https://lab.huaweicloud.com/testdetail_16534、轻松入门容器基础操作https://lab.huaweicloud.com/testdetail_16525、基于CCE进行云原生应用部署与运维管理https://lab.huaweicloud.com/testdetail_5586、基于容器实现一分钟自动化部署https://lab.huaweicloud.com/testdetail_3977、基于云容器引擎部署NGINX应用https://lab.huaweicloud.com/testdetail_381数据库1、10分钟快速入门RDShttps://lab.huaweicloud.com/testdetail_4762、使用DRS实现数据实时同步https://lab.huaweicloud.com/testdetail_5623、通过CDM同步数据到MRS Hivehttps://lab.huaweicloud.com/testdetail_5614、使用CDM将CSV文件迁移至RDShttps://lab.huaweicloud.com/testdetail_5565、数据库服务实践https://lab.huaweicloud.com/testdetail_5206、使用Python爬虫抓取图片和文字实验https://lab.huaweicloud.com/testdetail_4687、MySQL本地数据库迁移https://lab.huaweicloud.com/testdetail_290昇腾1、使用MindX SDK开发智能质检应用https://lab.huaweicloud.com/testdetail_5312、使用MindSpore进行可视化调试调优https://lab.huaweicloud.com/testdetail_4643、基于昇腾AI处理器的算子开发https://lab.huaweicloud.com/testdetail_4624、使用MindSpore开发训练模型识别手写数字(未完成)https://lab.huaweicloud.com/testdetail_461需要调试5、基于昇腾AI处理器的目标检测应用(ACL)https://lab.huaweicloud.com/testdetail_4586、使用昇腾AI弹性云服务器实现目标检测应用https://lab.huaweicloud.com/testdetail_4517、使用昇腾AI弹性云服务器实现图像分类应用https://lab.huaweicloud.com/testdetail_4498、使用昇腾弹性云服务器实现黑白图像上色应用(C++)https://lab.huaweicloud.com/testdetail_448大数据1、快速入门数据仓库服务GaussDB(DWS)https://lab.huaweicloud.com/testdetail_16612、使用DWS导入MRS-Hive数据源实现融合分析https://lab.huaweicloud.com/testdetail_16583、使用MRS HetuEngine体验跨源跨域分析能力https://lab.huaweicloud.com/testdetail_5414、基于Spark实现车主驾驶行为分析https://lab.huaweicloud.com/testdetail_3775、MapReduce服务初体验(未完成)https://lab.huaweicloud.com/testdetail_376应用服务1、基于ServiceStage的微服务开发与部署(同云原生)https://lab.huaweicloud.com/testdetail_16552、使用ROMA Connect实现子系统消息、数据和服务集成https://lab.huaweicloud.com/testdetail_5693、使用华为云DevCloud实现20分钟一行代码上云https://lab.huaweicloud.com/testdetail_4814、基于CloudDeploy十分钟搭建minikubehttps://lab.huaweicloud.com/testdetail_4535、基于CloudTest对云端应用进行性能测试(未完成)https://lab.huaweicloud.com/testdetail_414第三个模块不检测及资源包支付问题6、使用ServiceStage托管和治理天气预报应用https://lab.huaweicloud.com/testdetail_4127、基于DevCloud进行黑白棋实时对战游戏开发https://lab.huaweicloud.com/testdetail_411物联网1、基于IoT平台构建智慧路灯应用https://lab.huaweicloud.com/testdetail_459安全1、使用Web应用防火墙WAF安全防护实践https://lab.huaweicloud.com/testdetail_4542、初探CTF三大题型(MISC+Reverse+Crypto)https://lab.huaweicloud.com/testdetail_4523、通过靶场平台演练增强安全攻防意识https://lab.huaweicloud.com/testdetail_443
  • [技术干货] 基于物联网设计的铂电阻气体测温仪(华为云IOT)
    ## 1. 前言 随着当今社会的发展,对温度的测量、控制的精准度的需求变得越来越高。温度是企业生产过程、科学实验、日常的生活中都很常见也很重要的物理参数。 铂电阻测温仪是工业应用中最方便的温度测控仪表。由于其在精密测温方面的准确性,已被用作国际温标的定义。随着科学技术的不断发展和生产技术的不断提高,对温度计的要求越来越高。目前铂电阻温度计精度高、稳定性好。本文采用STM32单片机、配合NBIOT模块和铂电阻温度传感器PT100开发设计了企业云端气体检测温度监测系统。铂电阻传感器是利用电阻率随温度变化的特性(电阻温度效应)制成的一种热电阻传感器。温度测量范围约为-200-850摄氏度。测温范围广,广泛用于温度基准和标准测量。采集的温度通过液晶显示屏显示温度数据,数据显示精度达到±0.1°。 当前文章接下来就详细介绍基于物联网的铂电阻温度监测系统的设计方案和软硬件实现方案。 当前设计的这个测温仪,主要是用来测量高温气体温度,也可以用来测量水温、固态发热体的温度,一般用在、电子电路印刷焊接流水线上、热水工厂、锅炉类企业、烟囱上等地方。 设备本身采用BC20模块连接华为云物联网服务器,将测量的温度上传云端服务器保存,根据时间段对温度曲线进行分析,了解温度变化规律,实现超高温、低温预警等操作。 测温仪和STM32开发板的实物图如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654701045212888437.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654705070440972025.png) 测量的温度,绘制曲线效果: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654705875893676083.png) ## 2. 硬件选型 目前的硬件为了快速搭建出上面设计预想的环境,都采用模块方式搭建开发,采用了一块STM32开发板,一块LCD显示屏,一个BC20-NBIOT模块,一个铂电阻测温模块。 ### 2.1 铂电阻测温模块 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654700810052700833.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654701108486419099.png) 铂电阻,简称铂热敏电阻,其阻值会随着温度的变化而变化。有PT100和PT1000系列产品,适用于医疗、电机、工业、测温、卫星、气象、电阻计算等高精度温度设备。 Pt后的100表示0℃时其电阻值为100欧,100℃时其电阻值约为138.5欧。其工作原理:当PT100在0℃时,其电阻为100欧姆。它的电阻会随着温度的升高而上升,并且它的电阻会匀速增加。热电阻是一种常用于中低温的温度传感器。它的工作原理是基于电阻的热效应,即电阻的阻值随温度的变化而变化。铂金热敏电阻的热阻精度最高,具有抗振动、稳定性好、耐高压等特点。因此,它被制成各种标准温度计进行测量和校准。本文选用的铂热敏电阻为PT100,0℃时的阻值为100Ω。在0℃~100℃之间变化时,最大非线性偏差小于0.5℃。与热电偶不同,PT100 是无源传感器,因此需要设计额外的激励来产生电信号输出。 当前设计选用PT100铂电阻和max31865温度传感器模块读取温度数据。 Max31865 是一款简单易用的热敏电阻到数字输出转换器,针对铂电阻温度传感器 (RTD) 进行了优化。用于外部电阻设置的 RTD 的灵敏度。高精度 ADC 将 RTD 电阻与参考电阻的比率转换为数字输出。 Max31865 输入具有高达 ± 45V 的过压保护,并提供可配置的 RTD 和电缆开路/短路状况检测。采集的温度值送单片机处理并通过LCD显示;系统供电电路采用宽电压直流输入,由集成三端稳压芯片lm7805稳压,为单片机和显示模块供电;设计简单,既可以验证设计功能,又可以降低设计成本。 ### 2.2 STM32开发板 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654701137782510553.png) ### 2.3 BC20模块 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654701482469438366.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654701209020926612.png) ## 3. 华为云-物联网服务器端 当前这个设备设计是用来测量工厂内烟囱的气体温度,工厂内有多个烟囱,为了方便统一了解温度情况,这些烟囱上的设备都会将温度信息实时上传到云端,云端进行统一处理,最后在办公室通过数据大屏显示出来,绘制温度变化曲线。目前还没有去对接华为云的数值化大屏,我这里采用自己开发的上位机显示温度的曲线,主要是目前设备也只有一台,自己开发一个上位机通过应用侧的接口读取服务器上的数据,本地再绘制温度显示界面即可。 接下来就介绍如何使用华为云物联网平台创建产品、设备、配置模型文件等步骤。 ### 3.1 创建产品 华为云官网地址: https://activity.huaweicloud.com 打开官网后,就点击又上脚登录,没有账号就先注册。 再点击产品,找到物联网产品。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702232398570254.png) 点击免费试用。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702262742199475.png) 点击产品页面,点击右上角创建产品。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702507274757315.png) 填充设备信息。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702581923700176.png) 接下来在产品页面定义模型,设置设备上传的数据属性。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702631686340822.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702682931352511.png) 添加属性。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702698419449355.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702747929218333.png) 添加成功。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702765520287165.png) ### 3.2 创建设备 点击左边设备选型,再点击右上角创建设备。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702833725403383.png) 填充设备的参数。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702886336217518.png) 创建成功后保持设备属性信息。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702920648515254.png) ```cpp { "device_id": "62a0c1f9906b9e29ac74dd0d_tmp_dev1", "secret": "12345678" } ``` 设备创建成功。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702962149695406.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654702996311547371.png) ### 3.3 订阅主题与发布主题 BC20模块通过MQTT协议连接华为云物联网平台,要完成数据交互,需要知道华为云物联网平台的服务器IP地址,端口号,订阅的主题格式,发布主题的格式,登录的密匙三元组等信息。 【1】MQTT服务器域名端口号信息 官网介绍文档:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/instance/detail?id=8fe87243-d97d-4c1e-bb34-186a60ca2d14&type=public ```cpp 华为云物联网平台的域名是: 161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com 华为云物联网平台的IP地址是:121.36.42.100 端口号是1883 ``` 【2】订阅的主题格式与发布主题格式 官网介绍文档: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112 根据当前设备的信息总结,得到的格式信息如下: ```cpp //订阅主题: 平台下发消息给设备 $oc/devices/62a0c1f9906b9e29ac74dd0d_tmp_dev1/sys/messages/down //设备上报数据 $oc/devices/62a0c1f9906b9e29ac74dd0d_tmp_dev1/sys/properties/report //上报的属性消息 (一次可以上报多个属性,在json里增加就行了) {"services": [{"service_id": "tmp","properties":{"tmp":180.56}}]} ``` 【3】MQTT协议登录的三元组信息 华为云提供了MQTT协议参数的生成工具,非常方便,根据提示填入参数一键生成三元组。 MQTT设备登陆密匙生成地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/ ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654703322277791214.png) 得到MQTT三元组信息如下: ```cpp ClientId 62a0c1f9906b9e29ac74dd0d_tmp_dev1_0_0_2022060815 Username 62a0c1f9906b9e29ac74dd0d_tmp_dev1 Password 7c0934c36219afb4f776fc21d6a13cea9c7152add8dc79957255fa17a7c48bba ``` 这3个信息可以直接当做MQTT协议登录的参数填充,连接服务器。 ### 3.4 模拟设备登录 在开发硬件设备端程序前,先使用MQTT客户端模拟测试,测试是否能正常的上传数据到服务器。 使用的软件名称为: `MQTT客户端_v2.5(协议3.1.1).exe` 。 根据软件提示,填入对应的参数登录即可。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654703676730949162.png) 接着打开华为云的网页端,即可看到设备已经在线,并且收到了上传的数据。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654703733687691242.png) ## 4. 硬件设备端软件开发 ### 4.1 硬件连线 ```cpp 硬件连接方式: 1. TFT 1.44 寸彩屏接线 GND 电源地 VCC 接5V或3.3v电源 SCL 接PC8(SCL) SDA 接PC9(SDA) RST 接PC10 DC 接PB7 CS 接PB8 BL 接PB11 2. 板载LED灯接线 LED1---PA8 LED2---PD2 3. 板载按键接线 K0---PA0 K1---PC5 K2---PA15 4. MAX31865测温模块 PA2(TX)--RXD 模块接收脚 PA3(RX)--TXD 模块发送脚 GND---GND 地 VCC---VCC 电源(5.0V) 5. BC20模块接线说明: GND----GND PB10----BC20_RXD PB11----BC20_TXD ``` ### 4.2 整体程序设计 测温采用PT100热电阻,配合MAX31865完成温度测量,编程软件采用keil5,编程语言采用C语言,主控芯片采用STM32F103RCT6。MAX31865采集温度后通过串口协议输出。本身支持一套完整的AT指令集,支持温度查询、报警上限、下限的设置,默认的波特率是9600。系统上电后先对MAX31865进行初始化,LCD屏初始化,BC20-NBIOT模块初始化、如果MAX31865检测失败就一直循环检测,并且在LCD屏上显示温度传感器初始化状态,当传感器初始化成功之后,就进入到下面的主程序,在主循环里每500ms的频率读取一次温度,然后实时显示在LCD屏,并通过BC20上传到物联网服务器。当MAX31865检测到的温度高于阀值或者低于阀值,MAX31865控制板上会通过LED灯进行显示。程序里新建了MAX31865.c和MAX31865.h头文件,里面封装了MAX31865初始化检测、指令判断、温度读取等函数接口。 ```cpp //温度传感器硬件检测代码 while(1) { key=MAX31865_Init(); if(key==0)break; delay_ms(1000); printf("MAX31865检测失败.\r\n"); } printf("MAX31865检测成功.\r\n"); /* 函数功能: MAX31865命令发送函数 函数返回值:0表示成功 1表示失败 */ u8 MAX31865_SendCmd(char *cmd) { u8 i,j; for(i=0;i10;i++) //检测的次数--发送指令的次数 { USARTx_StringSend(USART2,cmd); for(j=0;j100;j++) //等待的时间 { delay_ms(50); if(USART2_RX_FLAG) { USART2_RX_BUFFER[USART2_RX_CNT]='\0'; USART2_RX_FLAG=0; USART2_RX_CNT=0; if(strstr((char*)USART2_RX_BUFFER,"OK")) { return 0; } } } } return 1; } ``` ### 4.3 铂电阻测温代码 整个系统的调试信息通过LCD屏和串口两种方式显示。拿到MAX31865模块后,先使用串口调试助手进行调试。PT100采用3线制接线,与MAX31865机芯连接,正常MAX31865上电之后发送AT\r\n,MAX31865会返回OK,通过返回的OK来检测MAX31865是否正常。然后在发送测温指令AT+T,MAX31865收到之后会返回+T=23.4这样的数据,后面的23.4就是当前铂电阻测量的温度信息。如果要设置报警的上限和下限,可以通过AT+TERRUP+26\r\n,后面的26就是设置的温度上限阀值(高报警门限)。AT+TERRDOWN+-24\r\n,后面的-25就是设置的温度下限报警阀值。 MAX31865模块采用5V供电,提供了串口输出接口,可以接PT100、PT1000等热电偶测温线。 在max31865函数的设计了核心的几个函数, 初始化、读温度、检测硬件等。 测量的温度显示: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654705057558844847.png) ```cpp #include "MAX31865.h" /* 函数功能: MAX31865命令发送函数 函数返回值:0表示成功 1表示失败 */ u8 MAX31865_SendCmd(char *cmd) { u8 i,j; for(i=0;i10;i++) //检测的次数--发送指令的次数 { USARTx_StringSend(USART2,cmd); for(j=0;j100;j++) //等待的时间 { delay_ms(50); if(USART2_RX_FLAG) { USART2_RX_BUFFER[USART2_RX_CNT]='\0'; USART2_RX_FLAG=0; USART2_RX_CNT=0; if(strstr((char*)USART2_RX_BUFFER,"OK")) { return 0; } } } } return 1; } /* 函数功能: MAX31865硬件初始化检测函数 函数返回值:0表示成功 1表示失败 */ u8 MAX31865_Init(void) { return MAX31865_SendCmd("AT\r\n"); } //测量的温度 char MAX31865_Temp[10]; //获取一次温度 char *MAX31865_GetTemp(void) { int i=0; char *p; int cnt = 0; strcpy(MAX31865_Temp,"\0"); /*获取温度*/ if(MAX31865_SendCmd("AT+T\r\n")) { return MAX31865_Temp; //失败 } //提取温度 +T=24.62\r\nOK p=strstr((char*)USART2_RX_BUFFER,"+T="); if(p) { p += 3; for ( i = 0; i 10; i++) { if (*p == '\r')break; else if (*p == '\n')break; else if (*p == '\0')break; else { MAX31865_Temp[cnt++] = *p; } p++; } MAX31865_Temp[cnt++] = '\0'; } return MAX31865_Temp; } ``` ### 4.4 BC20代码 【1】BC20拿到后先进行调试,测试模块是否OK,直接通过USB转TTLC连接电脑串口调试助手。 ```cpp 查询模块是否正常 AT OK 获取卡号,查询卡是否插好 AT+CIMI 460041052911195 OK 激活网络 AT+CGATT=1 OK 获取网络激活状态 AT+CGATT? +CGATT: 1 OK 查询网络质量 AT+CSQ +CSQ: 26,0 OK AT+CEREG=? //检查网络状态 +CEREG: 0,1 //找网成功 OK 激活GPS,要等一段时间 AT+QGNSSC=1 OK 查询激活状态,1表示成功激活 AT+QGNSSC? +QGNSSC: 1 OK 获取一次GPS定位语句 AT+QGNSSRD="NMEA/RMC" +QGNSSRD: $GNRMC,120715.00,A,3150.78179,N,11711.93433,E,0.000,,310818,,,A,V*19 OK ``` 【2】初始化没有问题之后,接下来通过AT指令连接物联网服务器,测试网络。 ```cpp 连接MQTT服务器 AT+QMTOPEN=0,"a161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com",1883 OK +QMTOPEN: 0,0 登录MQTT服务器 命令格式: AT+QMTCONN=,,, AT+QMTCONN=0,"6210e8acde9933029be8facf_dev1_0_0_2022021913","6210e8acde9933029be8facf_dev1","6cea55404b463e666cd7a6060daba745bbaa17fe7078dfef45f8151cdf19673d" OK +QMTCONN: 0,0,0 订阅主题 命令格式: AT+QMTSUB=,,"”,[,"”,…] AT+QMTSUB=0,1,"$oc/devices/62a0c1f9906b9e29ac74dd0d_tmp_dev1/sys/messages/down",2 OK +QMTSUB: 0,1,0,2 发布主题 命令格式:AT+QMTPUB=,,,,"","" 先发送指令: AT+QMTPUB=0,0,0,0,"$oc/devices/62a0c1f9906b9e29ac74dd0d_tmp_dev1/sys/properties/repor" 等待返回 ">" 接着发送数据.不需要加回车。 "{"services": [{"service_id": "tmp","properties":{"tmp":180.56}}]}" 数据发送完毕,再发送结束符。 十六进制的值--0x1a 。某些串口调试助手可以适应ctrl+z 快捷键输入0xA 等待模块返回"OK",到此数据发送完成。 OK +QMTPUB: 0,0,0 ``` 只要指令的流程明白了,接着就将指令封装成函数,使用STM32串口发送即可。 ## 5.上位机开发 上位机采用QT软件开发,通过华为云应用侧提供的接口获取服务器的温度数据,进行处理,显示。 ### 5.1 安装QT开发环境 目前我使用的开发环境是:QT 5.12.6 ,其他版本也可以的。 QT5.12.6的下载地址: ```cpp https://download.qt.io/archive/qt/5.12/5.12.6/ ``` 打开下载链接后选择下面的版本进行下载: ```cpp qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details ``` 软件安装时断网安装,否则会提示输入账户。安装的时候,第一个复选框里勾选一个mingw 32编译器即可,其他的不管默认就行,直接点击下一步继续安装。 如果只是在windows下开发,最简单的安装就只选择 MinGW编译器即可,其他的编译器不用勾选。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654704625493773952.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654704602583966869.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654704612200170468.png) ### 5.2 应用侧开发(查询设备属性) 目前获取服务器的数据,可以采用查询属性接口和查询影子设备属性接口。查询设备属性是同步接口,需要设备实时响应上传数据,影子设备是保存设备最后一次上传到服务器的数据。我这里采用查询影子设备的属性,读取最后一次上传的温度即可。 官方地址:https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654704781408623033.png) ### 5.3 实现代码 代码就只是贴出了两个主要的函数,获取token和查询设备属性的代码,界面显示代码,数据解析代码这些就不贴出了,这些只是附带的效果代码。 ```cpp /* 功能: 获取token */ void Widget::GetToken() { //表示获取token function_select=3; QString requestUrl; QNetworkRequest request; //设置请求地址 QUrl url; //获取token请求地址 requestUrl = QString("https://iam.%1.myhuaweicloud.com/v3/auth/tokens") .arg(SERVER_ID); //自己创建的TCP服务器,测试用 //requestUrl="http://10.0.0.6:8080"; //设置数据提交格式 request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8")); //构造请求 url.setUrl(requestUrl); request.setUrl(url); QString text =QString("{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":" "{\"user\":{\"domain\": {" "\"name\":\"%1\"},\"name\": \"%2\",\"password\": \"%3\"}}}," "\"scope\":{\"project\":{\"name\":\"%4\"}}}}") .arg(MAIN_USER) .arg(IAM_USER) .arg(IAM_PASSWORD) .arg(SERVER_ID); //发送请求 manager->post(request, text.toUtf8()); } //获取影子设备数据 void Widget::on_pushButton_addr_clicked() { //表示影子设备数据获取 function_select=0; QString requestUrl; QNetworkRequest request; //设置请求地址 QUrl url; //获取token请求地址 requestUrl = QString("https://iotda.%1.myhuaweicloud.com/v5/iot/%2/devices/%3/shadow") .arg(SERVER_ID) .arg(PROJECT_ID) .arg(Device_id); //自己创建的TCP服务器,测试用 //requestUrl="http://10.0.0.6:8080"; //设置数据提交格式 request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json")); //设置token request.setRawHeader("X-Auth-Token",Token); //构造请求 url.setUrl(requestUrl); request.setUrl(url); //发送请求 manager->get(request); } ``` 最终上位机实现的效果: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654705592026725189.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654705746286753481.png) ## 6. 华为云IOT微认证(3折微认证活动月) 目前华为云IoT开启了3折微认证活动月,华为云微认证提供一站式在线学习、实验与考试,零基础也可学习前沿技术知识,快速上手实战开发,获得场景化的技能提升! 即日起,报名活动即可参与抽奖,认证即送礼品,成团更送价值好礼! 不仅带你考取权威证书,0基础入门物联网开发,还可带走华为手环、耳机等豪华礼品! 【活动时间】 2022年5月17日-2022年6月17日 活动报名: https://developer.huaweicloud.com/signup/789d09ab650a46838b6908107d3282e1
  • [技术干货] 基于鲲鹏亲和开发框架进行原生开发
    ## 1. 前言 - 鲲鹏开发框架 是一款使能用户在鲲鹏服务器上进行开发的工具。鲲鹏开发框架充分利用鲲鹏平台的各类型算力及性能更优的第三方组件,提供鲲鹏工程向导、启发式编程、代码亲和检查等能力,一键引入鲲鹏加速库、快速构建鲲鹏应用软件框架,帮助开发者更便捷地开发鲲鹏应用,使能开发者高效创新。 - 鲲鹏原生开发 基于鲲鹏平台的新软件和新功能特性开发,应用鲲鹏DevKit工具把鲲鹏架构亲和性能充分体现的开发场景。 ## 2. 安装插件 首先要在本地电脑安装Visual studio code。 打开VScode,点击左侧树的扩展按钮,在搜索框中搜索“kunpeng”,安装鲲鹏开发框架插件。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654668781019641570.png) ## 3. 创建鲲鹏工程 点击左侧树的鲲鹏开发框架插件图标,点击新建鲲鹏工程按钮,进入新建鲲鹏工程界面,工程名称设置为testGzip,工程位置选择E:\博客文档\华为云\DevKit,构建类型选择cmake,其他配置信息如下图所示: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654668788344942752.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654668793185395562.png) Glibc-patch主要对内存、字符串、锁等接口基于华为鲲鹏920处理器微架构特点进行了加速优化,memcmp/memset/memcpy/memrchr/strcpy/strlen/strnlen已合入GNU社区,随Glibc 2.31主干版本发布,同步推送openEuler社区,已随openEuler 1.0发布。 Glibc-patch加速优化策略: - 遵循原Glibc CPU Feature设计,将加速代码与华为鲲鹏处理器做绑定优化,确保与其他友商代码相互兼容不冲突。 - 充分利用鲲鹏指令及鲲鹏处理器架构优势提高执行效率。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654668799728373403.png) 鲲鹏工程创建成功 ## 4. 查看鲲鹏工程 (1)工程创建成功后,点击查看工程按钮,选择本窗口打开。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654668816013630475.png) (2)我们点开工程third-party文件夹中的gzip子文件夹,查看里面的具体内容。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654668821601653109.png) (3)我们可以看到gzip文件夹中有两个子文件夹,分别是gzip_demo和gzip-1.10.aarch64, gzip_demo中包有一个名为demo_gzip的cpp文件,该demo包含了对gzip库中压缩和解压缩功能的调用。gzip-1.10.aarch64是已经下载并解压好的gzip鲲鹏加速库,该加速库针对鲲鹏处理器的架构特点,对gzip原生库进行了加速优化。接下来我们将利用demo_gzip来对比加速库和原生库在解压2G大小文件时的解压效率。 ## 5. 编译并执行鲲鹏工程 (1)首先,点击vscode上方的Terminal(终端)按钮,并选择New Terminal(新建终端)选项。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654668827079213101.png) 登录之后,依次执行如下命令: 清除鲲鹏工程目录中src文件夹中的内容 ```shell cd src rm -f * ``` 执行./configure编译gzip ```shell cd ../third-party/gzip/gzip-1.10.aarch64/ ``` ```shell bash ./configur ``` 执行脚本修改构建文件中的内容 ```shell cp ../../../../change_gzip_makefile.sh . ``` ```shell sh change_gzip_makefile.sh ``` 执行make命令 ```shell make ``` 将以下内容拷贝到源码lib目录下 ```shell cp libgzip.so gzip.h version.h lib/config.h ../../../lib ``` 接着拷贝gzip_demo内容到src目录 ```shell cd ../../../src ``` ```shell cp ../third-party/gzip/gzip_demo/* . ``` ```shell cd ../build ``` ```shell cmake .. ``` ```shell make ``` 拷贝待测试文件到src目录 ```shell cp ../../test.log.2G_1.origin.gz ../bin ``` ```shell cd ../bin ``` 执行鲲鹏工程代码对压缩包进行解压 ```shell gzip -d test.log.2G_1.origin.gz ``` ```shell time ./demo_gzip test.log.2G_1.origin test_huawei.gz ``` 下面使用原始gzip来对比解压性能 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654668837021887029.png) 下面使用原始gzip来对比解压性能 ```shell cd ../third-party/gzip ``` ```shell mv ../../../gzip-1.10.tar.gz . ``` ```shell tar -xf gzip-1.10.tar.gz ``` ```shell cd gzip-1.10 ``` ```shell bash ./configure ``` ```shell cp ../../../../change_gzip_makefile.sh . ``` ```shell sh change_gzip_makefile.sh ``` ```shell make ``` ```shell cp libgzip.so ../../../lib ``` 此处输入y同意覆盖 ```shell cd ../../../src ``` ```shell rm -f * ``` ```shell cp ../third-party/gzip/gzip_demo/* . ``` ```shell cd ../build ``` ```shell cmake .. ``` ```shell make ``` ```shell cd ../bin ``` ```shell time ./demo_gzip test.log.2G_1.origin test.gz ``` 此时从终端中的结果中可以看出,gzip原始库针对2G大小的压缩文件的解压时间为34.8秒,加速库相比于原生库有20%的性能提升。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654668848486189481.png)
  • [技术干货] 基于STM32+华为云IOT设计的老人防摔倒报警系统
    ## 1. 前言 我国独生子女,以及人口老龄化等问题,正逐渐成为一个重大的社会问题,老年人机体能力的下降,摔倒引起的安全和危害愈来愈突出,国家和社会越来越关注老年人的健康和安全,开发一个能够实时检测出老年人是否摔倒,并且能及时告知监护人的摔倒检测以及报警系统具有重要的现实意义。本系统包括检测摔倒模块、GPS定位模块和通信模块三部分,通过检测老年人日常状态,可以得知老年人的状态,如果监测到老年人摔倒了,此时会通过网络把检测结果上传到物联网云平台,获得老年人摔倒地点的GPS定位,并且通过GPRS通讯发短信给预设的监护人。 ## 2. 设计需求 (1)采用STM32单片机作为主控芯片,配合其他模块完成功能设计 (2)通信模块采用SIM800C,支持上传采集的GPS经纬度数据到云端服务器,云端采用华为云物联网平台。 (3)老人摔倒检测采用MPU6050陀螺仪检测,当检测到老人摔倒之后,会通过SIM800C发送短信到紧急联系人,设备上的蜂鸣器会发出警报声,周围行人听到也可以进行帮助;并且会将GPS数据上传到云端,通过地图显示老人的位置,家人通过短信知道老人摔倒后,通过云端地图显示的位置,可以快速赶到老人身边,或者报警求助,报告位置。 (4)老人摔倒后,如果自己能行动,没有大问题,可以自己按下设备上的按键取消蜂鸣器报警,并且通过SIM800C向家人发送一条短信,报平安。 ## 3. 设计的实物效果 为了快速验证方案的可行性,这里采用现成的模块采用杜邦线连接完成整个预想的功能设计。 下面就是硬件连接好之后的效果图,选用的硬件型号在第4章节已经全部贴出来了;为了方便户外测试,这里的供电电源采用了充电宝,也可以采用电池盒供电。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654611828763541312.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654611854264493879.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654611864621658164.png) 通过服务器返回坐标之后显示的轨迹、定位等信息,实时显示定位。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654666552687858340.png) 可以设置电子围栏,坐标超出之后进行提示。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654666630193312700.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654666733713299054.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654666764627708730.png) ## 4. 硬件选型 主控芯片采用STM32RCT6,通信模块采用SIM800C,GPS采集使用ATGM336北斗BDS+GPS双模模块,老人摔倒检测模块采用MPU6050陀螺仪。 这些都是采用现成的成品模块,都是在淘宝上买的,下面都贴出了模块的型号,模块的实物截图,如果自己想做一个,可以在淘宝上找到一样的模块型号购买。 ### 4.1 SIM800C SIM800C模块是一款高性能高性价比工业级的GSM/GPRS模块。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654612195228178520.png) **1、DC 5V-18V电源输入,推荐使用DC 9V** 2、电源开始使能引脚默认使能 **3、电源地** **4、GSM模块的TXD引脚接其它模块的RXD** **5、GSM模块的RXD引脚接其它模块的TXD** 6、数据终端准备 7、内核音频输出引脚 8、内核音频输出引脚 9、锂电池输入引脚,DC 3.5 - 4.5V 10、电源地 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654612248104999807.png) **11、启动引脚和GND短路可实现开机自启动** **12、电源地** 13、RTC外置电池引脚 14、内核振铃提示引脚 15、内合音频输入引脚 16、内核音频输入引脚 **加粗的引脚一般都用到。** 建议使用V_IN单独供电DC5-18V输入(推荐使用9V),或者VBAT供电锂电池两种供电方式这两种供电方式最稳定。 **总结:** 模块本身支持自适应波特率,可以自动根据发送过去的指令计算对应的波特率,一般使用115200即可。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654612860107297046.png) **模块调试总结:** (1)供电电压5V也可以,采用电脑USB供电(直接插电脑USB口)。正常供电之后,模块上有电源指示灯。 (2)SIM800C的TX脚接单片机的RX脚 (3)SIM800C的RX脚接单片机的TX脚 (4)SIM800C的第11个引脚(PWK)和12个引脚(GND)短接接在一起,才可以开机。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654612884831865928.png) 电源正常后,右上角有一个黄色的电源灯。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654613257499270037.png) 通过串口发送AT指令过去测试模块效果。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654613276924125043.png) ### 4.2 STM32F103C8T6开发板 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654613334203859254.png) ### 3.3 GPS模块 GPS模块正常定位后,模块上的LED灯会按照1秒钟闪烁一次。 返回的字段里$GNRMC表示当前定位的GPS经纬度,解析代码只需要解析$GNRMC字段。 第一次启动GPS模块,定位差不多要几分钟时间,定位成功后,第二次启动定位就很快,最好是在室外,室内信号差,定位时间更久。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654613385524230260.png) ### 4.4 MPU6050陀螺仪 陀螺仪选择的是正点原子的模块,比较稳定,质量较好。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654613398241542028.png) ### 4.5 蜂鸣器 蜂鸣器选择的高电平触发。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654613410458336529.png) ## 5. 创建云端物联网服务器 为了方便查看老人摔倒之后的位置,需要通过SIM800C将设备采集的GPS数据上传到云平台服务器保存,就算老人没有跌倒,也可以实时关注老人的位置,在地图上绘制出轨迹线路,方便家人随时联系,了解老人的情况。 这里物联网的平台选择是华为云物联网平台,目前是免费使用的,在云端创建产品等信息后,设备再通过MQTT协议连接云平台上传GPS数据。目前华为云的拖拽试网页开发页面已经下架,目前要开发对应的上位机,可以采用最近主推的低代码开发平台或者自己通过云平台的应用侧开发接口自己开发上位机,我这里是自己开发的上位机,通过QT编写的上位机APP,支持windows、Android、Linux等多个平台运行,跨平台使用还是比较方便。 下面接着就介绍如何登陆官网创建产品、设备、完成云端的产品部署。 ### 5.1 创建产品 官网地址: https://www.huaweicloud.com/product/iothub.html 打开官网后没有华为云账号需要先注册账号,这些步骤就不多说了,接下来就直接介绍如何创建产品、设备、配置属性、完成数据上传交互的流程。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654615063227820021.png) 点击免费使用进去页面。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654615376001477304.png) 点击左边产品选项,点击右上角创建产品按钮,弹出参数填充对话框。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654615410546954033.png) 根据自己的设备情况填入信息之后保存。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654615686437391185.png) 产品创建成功,点击查看详细信息。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654615726709192710.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654615752611801975.png) ### 5.2 创建模型文件 在现在的详情页面往下翻,可以看到模型创建的选项。 点击自定义模型选项,创建模型。 这里的模型就是设备上传的数据属性。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654615959215537746.png) 添加服务ID。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654616000663783657.png) 点击创建属性,这里选择JSON类型的数据,上传的GPS有经纬度两个数据,方便保存。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654616086397913200.png) 创建成功。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654616127502312806.png) ### 5.3 创建设备 产品是一个大框架的模型,下面可以创建很多具体的设备,目前我这里只有一个硬件设备,就创建一个设备就行了。设备可以手动创建,也支持自动创建,就像现在市面上的智能设备产品,拿到设备后,扫描设备上二维码再通手机APP就可以完成产品的创建,设备的添加。 目前我这里设备就只有一个,而且还要演示整个流程,就在网页上完成整个设备的创建。 链接地址: https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/device/all-device 点击左边的设备选项,再点击右上角的注册设备。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654616324530544885.png) 填充好信息之后,点击确定。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654616559778844835.png) 创建后保存设备的数据。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654616687257626924.png) ```cpp { "device_id": "GPS1", "secret": "12345678" } ``` 创建成功,目前设备处于未激活状态。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654616742347774247.png) ### 5.4 获取MQTT登录参数 目前产品、设备创建好之后就需要通过设备连接上来上传数据,要完成这个步骤,还需要知道一些前提的流程。 【A】华为云服务器IP地址、域名、端口号 【B】主题订阅的格式、主题发布的格式 【C】MQTT协议登录的三元组信息 充分了解了这3个信息之后就可以编写设备端代码了。下面就详细介绍这些信息怎么得到。 【1】华为云的服务器地址信息 在这里查看: https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/instance/detail?id=8fe87243-d97d-4c1e-bb34-186a60ca2d14&type=public ```cpp 华为云物联网平台的域名是: 161a58a78.iot-mqtts.cn-north-4.myhuaweicloud.com 华为云物联网平台的IP地址是:121.36.42.100 端口号是1883 ``` 【2】主题订阅的格式、主题发布的格式 主题订阅上报的格式在产品的详情页面可以看到。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654617665343588192.png) 主题发布官方的详细介绍在这里: https://support.huaweicloud.com/devg-iothub/iot_01_2127.html#ZH-CN_TOPIC_0240834853__zh-cn_topic_0251997880_li365284516112 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654617489186647411.png) 主题上报的属性格式说明文档地址: https://support.huaweicloud.com/api-iothub/iot_06_v5_3010.html ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654617549057348145.png) 根据当前设备的信息总结,得到的信息如下: ```cpp //订阅主题: 平台下发消息给设备 $oc/devices/GPS1/sys/messages/down //设备上报数据 $oc/devices/GPS1/sys/properties/report //上报的属性消息 (一次可以上报多个属性,在json里增加就行了) {"services": [{"service_id": "GPS","properties":{"GPS":{"lon":106.53,"lat":29.46}}}]} ``` 【3】MQTT协议登录的三元组信息 华为云提供了MQTT协议参数的生成工具,非常方便,根据提示填入参数一键生成三元组。 MQTT设备登陆密匙生成地址: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/ ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654618243136289009.png) 得到的三元组如下: ```cpp ClientId GPS1_0_0_2022060716 Username GPS1 Password 27a2d2dd716fac29a0041beec1d7cf5f5b529fac65cc815c7eed9adb04d7364b ``` ### 5.5 采用MQTT客户工具登录测试 为了方便验证服务器的配置以及主题、属性这些是否OK,可以先使用MQTT客户端模拟真实设备登录测试。下面这个MQTT工具是我自己开发的,为了方便测试对接物联网平台,使用QT写了这么一个工具软件。 工具软件的名称: `MQTT客户端_v2.5(协议3.1.1).exe` 我已经上传到CSDN的资源库里了,可以直接去CSDN里搜索就能找到软件的下载地址,下面的文章的附件里我也会上传一份。 在软件左边根据提示填入对应的参数,依次点击登录,订阅主题,发布主题即可。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654618676956345509.png) 这时打开网页可以看到设备已经在线了。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654618920827527802.png) 在设备影子页面上可以看到上传的数据内容。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654618953457508133.png) 启动消息跟踪,可以了解通信的过程。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654618992861494998.png) ## 6. STM32硬件设备端程序设计 在第5章完成了物联网云平台的构建,接下来的第6章节,就编写STM32设备端代码。 STM32设备端开发环境采用keil5进行开发,编程风格采用寄存器风格形式,不管使用库函数,还是寄存器,还是HAL库,本身都一样,没有太大区别,我编写STM32代码习惯了寄存器开发,主要是寄存器的代码比较简洁,工程文件精简。 关于keil5软件的下载流程、安装流程、基本使用办法这里就不在详细介绍,相应看这篇文章的`道友`应该这些会这些基操,这里主要是以项目为导向,介绍比较核心的知识点。 ### 6.1 硬件接线 下面是介绍使用的硬件模块与STM32开发板之间的硬件连线。 ```cpp SIM800C接线说明: GND----GND PA2----SIM800C_RXD PA3----SIM800C_TXD CH340模块接线说明: GND----GND RX-----PA9 GPS接线说明: (波特率需要根据GPS模块实际情况进行修改) GND----GND VCC---3.3V PB11----GPS_TX 蜂鸣器模块: 高电平响 BEEP----->PB8 板载LED灯: LED1--PC13 低电平亮 板载按键: KEY1--PA0 按下为高电平 外接按键: KEY1 -PB3 按下是低电平 KEY2 -PB2 按下是低电平 外接LED灯模块: LED1-PB4 低电平亮 LED2-PB5 低电平亮 硬件接线: 1 VCC 3.3V/5V 电源输入 ---->接3.3V 2 GND 地线 --->接GND 3 IIC_SDA IIC 通信数据线 -->PB6 4 IIC_SCL IIC 通信时钟线 -->PB7 5 MPU_INT 中断输出引脚 ---->未接 6 MPU_AD0 IIC 从机地址设置引脚-->PA15 AD0引脚说明:ID=0X68(悬空/接 GND) ID=0X69(接 VCC) 注意:陀螺仪初始化的时候,必须正常摆放才可以初始化成功 ``` 这是通过杜邦线接好模块后的效果图: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654619463062922987.png) ### 6.2 keil工程截图 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654619601374318257.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654619625941311862.png) ### 6.3 原理图 下面是绘制的原理图。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654619666172245021.png) ### 6.4 MQTT协议实现代码以及MQTT参数 SIM800C本身没有内置MQTT协议指令,只有TCP通信的指令,需要自己封装MQTT协议,然后通过TCP通信的相关指令完成云端服务器连接,实现数据交互。 下面这份代码是MQTT协议的参数定义,程序里为了方便修改,采用宏定义方式赋值这些参数。 ```cpp //华为物联网服务器的设备信息 #define MQTT_ClientID "GPS1_0_0_2022060716" #define MQTT_UserName "GPS1" #define MQTT_PassWord "27a2d2dd716fac29a0041beec1d7cf5f5b529fac65cc815c7eed9adb04d7364b" //订阅与发布的主题 #define SET_TOPIC "$oc/devices/GPS1/sys/messages/down" //订阅 #define POST_TOPIC "$oc/devices/GPS1/sys/properties/report" //发布 ``` 这是封装的几个MQTT协议核心函数: ```cpp /* 函数功能: 登录服务器 函数返回值: 0表示成功 1表示失败 */ u8 MQTT_Connect(char *ClientID,char *Username,char *Password) { u8 i,j; int ClientIDLen = strlen(ClientID); int UsernameLen = strlen(Username); int PasswordLen = strlen(Password); int DataLen; mqtt_txlen=0; //可变报头+Payload 每个字段包含两个字节的长度标识 DataLen = 10 + (ClientIDLen+2) + (UsernameLen+2) + (PasswordLen+2); //固定报头 //控制报文类型 mqtt_txbuf[mqtt_txlen++] = 0x10; //MQTT Message Type CONNECT //剩余长度(不包括固定头部) do { u8 encodedByte = DataLen % 128; DataLen = DataLen / 128; // if there are more data to encode, set the top bit of this byte if ( DataLen > 0 ) encodedByte = encodedByte | 128; mqtt_txbuf[mqtt_txlen++] = encodedByte; }while ( DataLen > 0 ); //可变报头 //协议名 mqtt_txbuf[mqtt_txlen++] = 0; // Protocol Name Length MSB mqtt_txbuf[mqtt_txlen++] = 4; // Protocol Name Length LSB mqtt_txbuf[mqtt_txlen++] = 'M'; // ASCII Code for M mqtt_txbuf[mqtt_txlen++] = 'Q'; // ASCII Code for Q mqtt_txbuf[mqtt_txlen++] = 'T'; // ASCII Code for T mqtt_txbuf[mqtt_txlen++] = 'T'; // ASCII Code for T //协议级别 mqtt_txbuf[mqtt_txlen++] = 4; // MQTT Protocol version = 4 对于 3.1.1 版协议,协议级别字段的值是 4(0x04) //连接标志 mqtt_txbuf[mqtt_txlen++] = 0xc2; // conn flags mqtt_txbuf[mqtt_txlen++] = 0; // Keep-alive Time Length MSB mqtt_txbuf[mqtt_txlen++] = 100; // Keep-alive Time Length LSB 100S心跳包 保活时间 mqtt_txbuf[mqtt_txlen++] = BYTE1(ClientIDLen);// Client ID length MSB mqtt_txbuf[mqtt_txlen++] = BYTE0(ClientIDLen);// Client ID length LSB memcpy(&mqtt_txbuf[mqtt_txlen],ClientID,ClientIDLen); mqtt_txlen += ClientIDLen; if(UsernameLen > 0) { mqtt_txbuf[mqtt_txlen++] = BYTE1(UsernameLen); //username length MSB mqtt_txbuf[mqtt_txlen++] = BYTE0(UsernameLen); //username length LSB memcpy(&mqtt_txbuf[mqtt_txlen],Username,UsernameLen); mqtt_txlen += UsernameLen; } if(PasswordLen > 0) { mqtt_txbuf[mqtt_txlen++] = BYTE1(PasswordLen); //password length MSB mqtt_txbuf[mqtt_txlen++] = BYTE0(PasswordLen); //password length LSB memcpy(&mqtt_txbuf[mqtt_txlen],Password,PasswordLen); mqtt_txlen += PasswordLen; } memset(mqtt_rxbuf,0,mqtt_rxlen); MQTT_SendBuf(mqtt_txbuf,mqtt_txlen); return 1; } ``` ### 6.4 MPU6050.c代码 这是MPU6050陀螺仪的核心驱动代码,方便检测老人的姿态,判断是否摔倒。 因为文章发表的字数限制问题,无法贴出代码,代码后面整理了通过附件上传。 ### 6.5 GPS.c代码 接收GPS数据之后进行解析,得到经纬度,方便上传到物联网云平台。 ```cpp #include "gps.h" /* 函数功能:从buf里面得到第cnt个逗号所在的位置 返 回 值:0~254,代表逗号所在位置的偏移. 255,代表不存在第cnt个逗号 */ u8 GPS_GetCommaOffset(char *buf,u8 cnt) { char *p=buf; while(cnt) { if(*buf=='*'||*buf<' '||*buf>'z')return 255;//遇到'*'或者非法字符,则不存在第cx个逗号 if(*buf==',')cnt--; buf++; } return buf-p; //计算偏移量 } /* 函数功能: 获取GPS经纬度数据值 函数参数: double *Longitude :经度 double *latitude :纬度 返回值: 0表示定位成功,1表示定位失败 说明: 解析$GPRMC命令,得到经纬度 $GNRMC,023705.000,A,2842.4164,N,11549.5713,E,1.73,91.65,150319,,,A*41 转换公式示例: 经度: dddmm.mmmm 东经 11408.4790 114+(08.4790/60)=114.141317 纬度: ddmm.mmmm 北纬 2236.9453 22+(36.9453/60)= 22.615755 中科微返回的数据 $GNRMC,144435.000,A,2942.1201,N,10636.6466,E,1.50,64.42,190422,,,A*40 */ u8 GPS_GPRMC_Decoding(u8 *gps_buffer,double *Longitude,double *latitude) { u8 Offset; u32 int_data; double s_Longitude,s_latitude; char *p; /*1. 确定下定位是否成功*/ p=strstr((char*)gps_buffer,"$GNRMC"); if(!p)return 1; Offset=GPS_GetCommaOffset(p,2); if(Offset==255)return 2; if(*(p+Offset)!='A')return 3; //定位不准确 /*2. 得到纬度*/ Offset=GPS_GetCommaOffset(p,3); if(Offset==255)return 4; sscanf(p+Offset,"%lf",&s_latitude); s_latitude=s_latitude/100; int_data=s_latitude;//得到纬度整数部分 s_latitude=s_latitude-int_data;//得到纬度小数部分 s_latitude=(s_latitude)*100; *latitude=int_data+(s_latitude/60.0); //得到转换后的值 /*3. 得到经度*/ Offset=GPS_GetCommaOffset(p,5); if(Offset==255)return 5; sscanf(p+Offset,"%lf",&s_Longitude); s_Longitude=s_Longitude/100; int_data=s_Longitude;//得到经度整数部分 s_Longitude=s_Longitude-int_data; //得到经度小数部分 s_Longitude=s_Longitude*100; *Longitude=int_data+(s_Longitude/60.0); return 0; } ``` ## 7. 上位机APP开发 为了方便查看地图位置,轨迹等信息,当前采用QT编写了一个配套的上位机,通过华为云IOT的应用侧开发接口,获取设备的影子数据,然后再调用百度地图进行显示目标位置。 接下来就介绍上位机软件的开发流程。 ### 7.1 安装Qt开发环境 Qt是个跨平台的C++开发框架,一份代码支持在不同系统平台编译运行。支持Android、IOS、Windows、Linux等平台。 目前我使用的开发环境是:QT 5.12.6 ,其他版本也可以的。 QT5.12.6的下载地址: https://download.qt.io/archive/qt/5.12/5.12.6/ 打开下载链接后选择下面的版本进行下载: ```cpp qt-opensource-windows-x86-5.12.6.exe 13-Nov-2019 07:28 3.7G Details ``` 软件安装时断网安装,否则会提示输入账户。安装的时候,第一个复选框里勾选一个mingw 32编译器即可,其他的不管默认就行,直接点击下一步继续安装。 如果只是在windows下开发,最简单的安装就只选择 MinGW编译器即可,其他的编译器不用勾选。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654652810682954333.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654652827743656689.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654652838716466203.png) ### 7.2 应用侧开发接口文档 帮助文档地址: https://support.huaweicloud.com/usermanual-iothub/iot_01_0045.html 当前我这个应用主要是读取设备上传的GPS数据即可,要得到数据有两种方式: 【1】读取设备影子数据,也就是获取设备上传到服务器之后的历史数据(非实时数据)就是设备最后一次传上来的数据,获取影子数据,不需要关心设备是否在线都可以获取。 我这里GPS获取是获取的影子设备数据,也就是得到设备最后一次上传的数据。 地址:https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654655088628806784.png) 【2】(查询设备属性)读取实时数据,如果需要设备立即发布当前的数据上来,可以发送同步指令给设备,设备端需要编写解析指令的代码,收到指令后设备根据格式回应数据回来。这种同步实时数据需要设备保持在线才可以响应指令。 具体的使用场景可以根据自己需求设计。 通过查询属性的接口,可以主动请求获取设备详细属性。 **流程是:应用层调用这个API接口---->请求服务器----->请求客户端设备------>返回给服务器----->返回给应用层调用处。** 文档地址:https://support.huaweicloud.com/api-iothub/iot_06_v5_0034.html ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654655022205167514.png) ### 7.3 创建IAM账户 这一步很重要,在开发上位机时,需要调用应用侧的一些接口,这些接口都需要带上token登录密匙。而token登录密匙的生成需要IAM账户才获取。 地址:https://console.huaweicloud.com/iam/?region=cn-north-4#/iam/users **(1)创建用户** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654654902648317962.png) **(2)填充参数** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654654927775110314.png) **(3)完成创建** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/8/1654654947851652279.png) ### 7.4 实现代码 下面贴出请求接口的核心代码。 ```cpp /* 功能: 获取token */ void Widget::GetToken() { //表示获取token function_select=3; QString requestUrl; QNetworkRequest request; //设置请求地址 QUrl url; //获取token请求地址 requestUrl = QString("https://iam.%1.myhuaweicloud.com/v3/auth/tokens") .arg(SERVER_ID); //自己创建的TCP服务器,测试用 //requestUrl="http://10.0.0.6:8080"; //设置数据提交格式 request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8")); //构造请求 url.setUrl(requestUrl); request.setUrl(url); QString text =QString("{\"auth\":{\"identity\":{\"methods\":[\"password\"],\"password\":" "{\"user\":{\"domain\": {" "\"name\":\"%1\"},\"name\": \"%2\",\"password\": \"%3\"}}}," "\"scope\":{\"project\":{\"name\":\"%4\"}}}}") .arg(MAIN_USER) .arg(IAM_USER) .arg(IAM_PASSWORD) .arg(SERVER_ID); //发送请求 manager->post(request, text.toUtf8()); } //获取影子设备数据 void Widget::on_pushButton_addr_clicked() { //表示影子设备数据获取 function_select=0; QString requestUrl; QNetworkRequest request; //设置请求地址 QUrl url; //获取token请求地址 requestUrl = QString("https://iotda.%1.myhuaweicloud.com/v5/iot/%2/devices/%3/shadow") .arg(SERVER_ID) .arg(PROJECT_ID) .arg(Device_id); //自己创建的TCP服务器,测试用 //requestUrl="http://10.0.0.6:8080"; //设置数据提交格式 request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json")); //设置token request.setRawHeader("X-Auth-Token",Token); //构造请求 url.setUrl(requestUrl); request.setUrl(url); //发送请求 manager->get(request); } ``` 主要贴出2个比较重要的函数,一个获取token,一个查询设备影子数据。 ## 8. 华为云IOT微认证(3折微认证活动月) 目前华为云IoT开启了3折微认证活动月,华为云微认证提供一站式在线学习、实验与考试,零基础也可学习前沿技术知识,快速上手实战开发,获得场景化的技能提升! 即日起,报名活动即可参与抽奖,认证即送礼品,成团更送价值好礼! 不仅带你考取权威证书,0基础入门物联网开发,还可带走华为手环、耳机等豪华礼品! 【活动时间】 2022年5月17日-2022年6月17日 活动报名: https://developer.huaweicloud.com/signup/789d09ab650a46838b6908107d3282e1
  • [技术干货] 第二讲:鲲鹏代码迁移工具基础知识读书笔记
    本文课程链接:https://www.hikunpeng.com/zh/developer/live/detail/1533984621405396993 本文主要介绍鲲鹏代码迁移工具的功能与特性。通过本文,你可以了解到: ① 了解什么是代码迁移工具 ② 了解代码迁移工具的功能 ③ 了解到代码迁移工具在实际案例中如何运用 ## 1.代码迁移工具是什么 处理器所支持的指令集不同,意味着开发者可能需要对代码进行跨平台的迁移。通常,代码迁移是件复杂又繁琐的工作,需要花费开发者大量精力对软件包、源代码、依赖库文件进行人工分析、检查和识别,手动修正不同指令集之间的相关差异,这些差异主要涉及语法、指令、函数和库文件支持情况。为了解决用户代码可迁移性人工排查困难、移植经验欠缺、反复依赖编译调错定位等,投入工作量大,整体效率低的问题,我们推出Kunpeng Porting Advisor鲲鹏代码迁移工具。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607437314868946.png) 2.代码迁移工具功能 鲲鹏代码迁移工具是一款可以简化应用迁移到鲲鹏架构服务器过程的工具。主要面向鲲鹏平台的开发者、用户和第三方待迁移软件提供方开发工程师,对海量代码进行快速地自动化扫描和分析,提供专业的迁移指导报告。同时能够自动分析出需修改的代码内容,并指导如何修改,帮助开发者实现高效的代码迁移。同时支持原生开发代码亲和检查等能力。 3.功能特性 代码迁移工具可以作为独立软件提供给鲲鹏生态用户安装使用 支持的功能特性如下∶ 当前工具支持五组功能,支持的功能特性分别如下: 软件迁移评估 检查用户提供的软件安装包,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。·检查用户在x86服务器上已安装的软件,识别依赖关系,并提供鲲鹏兼容版本的so依赖库对应rpm的包OS发行版官方下载链接。 源码迁移 · 检查用户C/C++/汇编/Fortran代码软件构建工程文件, 并指导用户如何迁移该文件。 检查用户C/C++/汇编/Fortran/python/Java/ScalalGo软件构建工程文件使用的链接库,并提供可迁移性信息。 - 检查用户C/C++/汇编/Fortran软件源码,并指导用户如何迁移源文件。 - 软件包重构,分析用户x86软件包构成,重构为适用于鲲鹏平台的软件包。 - 专项软件迁移,基于我们丰富的软件迁移经验,帮助用户快速迁移Web、数据库、大数据、高性能计算四大解决方案类软件。鲲鹏亲和分析,目前含64位运行模式检查、结构体字节对齐检查、缓存行字节对齐检查、内存一致性检查、构建亲和检查。 - 用户通过安全传输协议上传软件源码、软件包、二进制文件等资源到工作空间,也可以从Web页面上直接对工作目录下的文件进行删除清理或 者覆盖重命名。 - 支持命令行方式、Web、IDE插件三种工作模式,后两种方式下支持多用户并发扫描。 > 特别说明:工具不支持迁移windows环境下的软件或者IOSMacOS平台应用至Kunpeng平台Linux环境下。 4.应用场景 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607455837197525.png) 对最常用的x86汇编指令进行识别并转换 - 最常用的100O+条汇编指令自动翻译。 针对受支持的嵌入式汇编指令,提供修改指导;针对完全由受支持的完整汇编指令构成的文件,支持自动转换为结果汇编文件; - 支持对尚无法指导修改和转换的汇编指令的识别、提醒。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607461453552415.png) 鲲鹏迁移亲和检查可以告知用户需要修改的地方,而不需要自己去查找,节约时间,提高开发效率。 5.部署方式 代码迁移工具采用单机部署方式,部署环境要求如下表所示。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607475159948277.png) 6. 如何访问使用 代码迁移工具提供两种用户访问模式,安装时由用户选择,同一套环境只能安装一种: - CLI方式: 通过命令行方式使用代码迁移工具各功能,最终移植分析结果输出到.csv和.json文件,用户可以根据迁移建议进行处理。. - Web/IDE插件方式: 通过浏览器IDE远程使用代码迁移工具各功能,最终迁移分析结果输出到.csv和.html文件(可下载)中,用户可以根据迁移建议进行处理。如果当前用户已经在登录使用,重复登录会挤掉前面的登录。用户的各种分析和迁移任务都在自己的工作空间内完成。访问Web界面时,对本地浏览器的要求如下表所示。 ## 2. 代码迁移工具的功能 ### 2.1 源码迁移 - 识别C/C++/Fortran(汇编源代码,提供修改建议;Make、CMake、Automake编译选项、编译宏的解析及迁移建议 - 支持100%Intrinsic函数转换(6000+个),包括MMX、SSE及AVX Intrinsic等 - 支持Fortran内联函数和语法特性以及编译选项的识别 - 支持Go语言迁移,对go程序使用cgo编译部分中的编译选项、宏定义提供兼容性检查,给出修改建议 - 支持python、Java、Scala语言,对程序中的动态链接库提供兼容性检查,给出修改建议 ### 2.2 源码迁移业务流程 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607492943813936.png) ### 2.3 源码迁移 源码迁移中如果有不同的源码混合编程则需要填写全部源码类型 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607499930494700.png) ### 2.4 迁移报告 ### 2.5 汇编翻译 鲲鹏DevKit支持全汇编翻译和嵌入式汇编翻译 - 支持汇编代码自动识别,一键替换迁移,一分钟完成汇编代码的迁移。 - x86汇编常用指令100%识别,1000+指令自动翻译,覆盖80%的常用应用场景。 ### 2.6 软件迁移评估 - 识别检查x86平台软件安装包或已安装软件中使用的动态链接库、静态链接库和可执行文件,并将检查出的文件与工具内置的依赖文件列表进行比较匹配,从而为用户提供迁移建议 - Jar,war包扫描增强,识别鲲鹏平台已经支持的依赖,提供更精准的依赖兼容替换建议 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607516722194866.png) ### 2.7 软件迁移评估流程 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607521296227908.png) ### 2.8 软件包重构 识别分析用户x86软件包构成,重构适用于鲲鹏平台软件包,并输出重构报告 软件包重构功能主要对包内包含的.so文件,.a文件和.jarl.war文件进行分析,会对其中需要适配鲲鹏平台的依赖文件进行替换,然后执行软件包的重构,最终输出鲲鹏兼容版本的软件安装包。如果包中需要的依赖不确定是否鲲鹏平台兼容,可在鲲鹏平台验证后,手动上传依赖配置文件,进行重构操作。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607526265993772.png) ### 2.9专项软件迁移 - —键下载开源代码,并编译、构建为鲲鹏软件包 - 支持大数据、数据库、Web、高性能计算等场景主流软件的一键编译迁移 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607533215228609.png) ### 2.10 内存一致性 - 静态检查,检查用户软件迁移到鲲鹏平台可能存在的弱内存序问题并修复 - 支持下载静态检查工具产生的BC文件,可根据实际需要进行BC - 自动修复功能,更新用户使用的GCC编译器,在用户软件的编译过程中自动文件扫描分析完成弱内存序问题的修复 - 静态检查工具、编译器自动修复工具组合使用,可一键式修复 - 支持自动生成目标工程的中间文件,不需要用户修改编译脚本 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607570034295090.png) ## 3.案例演示 ### 3.1 源码迁移1 案例下载链接: https://github.com/kunpengcompute/devkitdemo/tree/main/Porting_advisor/testdemo/code_migrationlcode 操作步骤上传源码,选择CIC++、make参数扫描出源码需修改文件进行逐个修改然后进行保存。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607579200994304.png) ### 3.2 源码迁移2 Python语言扫描,识别出工程中使用的依赖库,对其兼容性进行判断,样例报告中可直接下载使用依赖库。 ### 3.3 软件迁移与软件包重构案例 软件迁移评估:找出so依赖库和可执行文件,并评估so依赖库和可执行文件的可迁移性。 软件包重构:用户上传需要重构的软件包和依赖配置文件,重构完成后,用户可以直接下载重构后的rpm软件包,然后在鲲鹏平台上直接使用。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607685657168812.png) ### 3.4 内存一致性案例 操作步骤 上传源码,填写编译命令,样例中使用“make NO_LAPACKE=1”,点击下一步,开始BC文件解析,选择生成的BC文件,进行弱内存问题检查。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/7/1654607606902498191.png)
  • [其他] 【开天aPaaS工作台操作指导3-进阶】创建连接器并创建流
    3. 进阶任务-创建连接器并创建流(建议在外网环境下进行操作)3.1 前期准备:       1)申请公测,并开通开天集成工作台 cid:link_11       2)准备API,或在华为云商店购买API cid:link_4注:申请公测后,页面会跳转到开通工作台的界面,页面上如显示“您还没有开通集成工作台”属于正常跳转流程。      点击“立即开通”,输入所属行业和企业名称,账号正式开通集成工作台。3.2 操作指导:       场景说明:在生活中,我们经常需要用到不同规格要求的证件照:白底红底蓝底、电子版打印版、1寸2寸……没有还得立马赶去照相馆,那我们能不能直接用手机拍摄照片,处理后作为证件照呢?操作流程示意图:第一步:购买API       1)进入华为云商店→搜索“证件照接口API”→购买,规格分别选择【证件照制作接口】、【证件照环境检测】,套餐包选择0元/60次。证件照接口API地址:cid:link_1       2)购买成功后可以在云市场上买家中心获取AK/SK、查看使用情况、调试API等买家中心:https://console.huaweicloud.com/marketplace/tenant/?region=cn-north-4&locale=zh-cn#/market/order/purchasedProducts             a. 获取AK/SK              参考:什么是AK/SK?  cid:link_9             b. 调试API证件照制作接口             根据参考文档,填写请求体:             { "type": "jpg", "spec": "1", "bk": "white", "photo":"图片base64"}           说明:导入源码时,请确认格式为json           参数说明:           Type:图片类型,支持“jpg”和“png”两种类型;           Spec:证件照规格ID,根据想要制作的证件照类型选择,spec为1表示制作1寸证件照,ID对应的证件照类型请在附件-证件照制作接口文档中查询。           Bk:颜色编码,证件照背景颜色的代码,bk为white表示制作白底证件照,请在附件-证件照制作接口文档中查询。           Photo:Base64编码是一种图片处理格式,通过特定的算法将图片编码成一长串字符串,在页面上显示的时候,可以用该字符串来代替图片的URL。附件中提供了4个图片base64编码,您也可以选择自己的图片,在线转换为base64编码。在线转换参考地址:https://c.runoob.com/front-end/59/点击发送请求后,页面滑到最下方,右边可以看到,收到的响应体为:             ii. 证件照环境检测接口:             根据参考文档,填写请求体:             {“photo”: “图片base64编码”}           说明:图片base64 太长不方便显示,请用附件中提供的图片base64编码替换。点击发送请求后,收到的响应体为:对于有研发经验的小伙伴来说,创建连接器,可以直接编写OpenAPI文件,导入即可;对于非研发同学来说,则可以按下面的步骤一步步构建。第二步:将购买的API创建成连接器       1)登录开天集成工作台管理控制台 cid:link_2       2)进入连接器管理->我的连接器,点击创建我的连接器       3)先导入证件照制作API,根据商品详情内的信息填写连接器基本信息,填好后点击立即创建       说明:1、需要注意的是,由于这两个API的调用地址不同,       制作:cid:link_10       环境检测:cid:link_3       所以需要创建两次连接器,如果调用地址相同的话,只需要在一个连接器内创建多个执行动作就可以了。       2、云市场内购买的API直接选择AK/SK认证即可       协议和主机地址在对应API的商品详情中查看。        4)创建好连接器后,点击更多->创建执行动作       5)ID和动作名称自定义,选择下一步       注:ID中不能包含中文。       6)接口路径,请求方式选择POST,路径填写/idphoto/make       在第一步的调试API中,我们已经写好了请求体,点击导入源码,将请求体的代码复制过来,确定。可以适当补充别名,作为流编排中的参数说明。将四个参数都勾选为必填项。       7)点击下一步,填写响应体,将调试制作证件照API中,收到的响应体复制过来,导入源码{"status": 0, "time": 1207, "data": {"result": "https://oapi.aisegment.com/static/photo/p2/20220624/apiresult/ee9/ee96269ff4494932beef441df62e755c.jpg", "size": [295, 413]}, "errmsg": "SUCCESSFULLY", "error": ""}       8)执行动作创建完后,发布连接器。说明:如果在保存执行动作后,还需要修改,则点击对应连接器的名称进入详情页,编辑执行动作。      连接器可以创建触发事件和执行动作:触发事件:触发器从连接器读取数据。触发器关注发生的特定事件,例如正在创建的新联系人或订单,并提供相关数据,以便用户可以对该事件采取行动。执行动作:通过定义执行动作确定用户可以执行的操作。操作可用于读取、创建、更新或删除对应服务中的资源。       9)下一步需要创建连接。       10)填写在第一步中获取到的AK/SK。AppKey就对应accessKey,AppSecret就对应secretAccessKey。       10)按照相同的步骤,创建证件照环境检测的连接器,导入环境检测API。       创建连接器。       创建执行动作。       导入请求体源码。       导入响应体源码。       创建连接。第三步:根据场景创建流(注:输入参数时,如遇到网页停止运行或者保存请求超时的情况,请检查网络是否设置了上传拦截,建议切换至外网环境操作)       1)选择手动触发器,由于证件照制作API中有四个输入参数,所以我们先在手动触发器这里定义出来。       2)添加环境检测执行动作。通过环境检测的成功返回示例可知,如果环境通过检测,则“pass”为true且“reasons”数组长度为0,如果环境未通过检测,则“pass”为false且“reasons”返回失败原因。这里我们条件放宽一点,只要失败原因少于等于两条,都继续制作证件照,多于两条则给用户发邮件,提示更换照片或者更换环境再次拍摄照片。       3)添加条件判断选择函数中的length()函数,括号中选择动态内容中的reasons,条件选择小于等于2       4)在左边添加制作证件照的执行动作,并配置好参数。添加发送邮件的执行动作,将成功制作的照片链接发送到自己的邮箱。       5)另一边,如果环境检测失败,则返回失败原因。       6)另保存后运行,如果成功,则邮件会收到照片链接:如果失败,邮件会收到失败原因:        附件中提供两种结果的图片base64编码,用于测试。附件:1. 环境检测成功_图片base64编码(原图100k,适用于网络设置了上传拦截的情况)2. 环境检测成功_图片base64编码(原图较大,适用于外网环境)3. 环境检测失败_图片base64编码(原图100k,适用于网络设置了上传拦截的情况)4. 环境检测失败_图片base64编码(原图较大,适用于外网环境)进阶任务完成后,不要忘了来这里打卡哦~打卡方式:完成进阶任务+运行日志截图回帖如何添加图片?点击左侧的“回复”图标,文字框为快速回复,只能发送文字有不明白的地方?希望加入开天aPaaS开发者社群?扫码添加华为云开天小助手~活动总览-[活动总览]体验开天aPaaS集成工作台,挑战进阶任务赢华为手表!活动1-关注开天aPaaS论坛,开通集成工作台,10万码豆任你拿!活动2-【开天aPaaS工作台火热公测中】体验API新玩法,挑战进阶任务,赢华为Watch GT2!活动3-【开天aPaaS分享有礼】讲体验、提建议,赢华为AI迷你音箱等好礼!活动4-【有奖征文 第14期】开发者集结!体验开天aPaaS平台,赢智能安防家庭套装
  • [其他] 【开天aPaaS工作台操作指导1-新手】利用模板创建流
    各位开发者们~集成工作台体验任务的操作指导来咯!体验活动开始咯!完成任务并截图回帖,华为手表、AI音箱、码豆已经准备就绪,Are you ready?新手任务-利用模板创建流1. 前期准备:开通开天集成工作台 cid:link_8注:申请公测后,页面会跳转到开通工作台的界面,页面上如显示“您还没有开通集成工作台”属于正常跳转流程。      点击“立即开通”,输入所属行业和企业名称,账号正式开通集成工作台。2. 操作指导:1)登录开天集成工作台管理控制台 cid:link_12)进入流管理->流模板图1.2-2 (图片不清晰可点击右上角打开原图)3) 选择一个模板创建流,选用任意一个流模板完成任务都可以。这里以“每早八点准时发送热点新闻到我邮箱”为例。4) 根据需要修改参数     a. 重复执行执行时间、方式和周期都可自定义。将“首次运行时间”修改为9:15,“重复方式”和“重复周期”修改为每天运行一次(如图)。图1.2-4a说明1:由于示例的流模板的触发事件为重复执行,所以开启后会按照设置的周期一直运行,如果不希望一直收到信息,您可以选择:运行成功后,在“我的流”中,关闭流;在编辑流时,删除“重复执行”触发事件,修改为“手动触发流”。这样就将自动化流修改为了手动触发流,关于两种流的区别,可以在帮助文档->视频帮助中查看。cid:link_7 说明2:选择的流模板不同,触发事件可能也有不同,主要有三类,1、手动触发流,流可以直接运行;2、重复执行,根据设定的重复方式,开启后自动运行;3、其他连接器的触发事件,如周期查询料品等,按设置的轮询间隔运行。     b. 热搜新闻榜单不需要配置。     c. 发送邮件输入自己的邮箱,按需求修改邮件内容。图1.2-4c5)保存后,开启流,流将于每天9:15运行一次。6)流运行成功后,进入流管理->流运行日志,可以查看运行情况及输入/输出参数。说明:如果想立即查看效果,可以修改首次执行时间,或选择触发事件为手动触发流的流模板。图1.2-63 参考视频: cid:link_2cid:link_0新手任务完成后,不要忘了来这里打卡哦~打卡方式:完成新手任务+运行日志截图回帖如何添加图片?点击左侧的“回复”图标,文字框为快速回复,只能发送文字有不明白的地方?希望加入开天aPaaS开发者社群一同交流?欢迎扫码添加华为云开天小助手~活动总览-[活动总览]体验开天aPaaS集成工作台,挑战进阶任务赢华为手表!活动1-关注开天aPaaS论坛,开通集成工作台,10万码豆任你拿!活动2-【开天aPaaS工作台火热公测中】体验API新玩法,挑战进阶任务,赢华为Watch GT2!活动3-【开天aPaaS分享有礼】讲体验、提建议,赢华为AI迷你音箱等好礼!活动4-【有奖征文 第14期】开发者集结!体验开天aPaaS平台,赢智能安防家庭套装
总条数:39 到第
上滑加载中