1小时打造HaaS版小小蛮驴智能车

1、认识一下小小蛮驴真面目

1.1、组件部分
image.png

HaaS100核心板
HaaS100是一款物联网场景中的标准硬件,并配套嵌入到硬件中的软件驱动及功能模块,为用户提供物联网设备高效开发服务。
image.png

HaaS100核心板有着丰富的外设接口,如下所示:
image.png

智能车底板电路

  • 红外接收头子,实现红外遥控小车
  • 5V电源稳压芯片
  • 电机驱动芯片,电流可达2A,为小车提供强大的动力
  • 电源指示灯
  • 保护二极管

其他丰富接口

  • 电机接口
  • 超声波模块接口
  • 舵机模块接口
  • 测速模块接口
  • 红外避障模块接口
  • 电池座接口
  • HaaS连接接口

1.2、重要模块介绍
1.2.1、驱动电机
驱动电机芯片是小车最重要的模块之一,2A的强大输出电流为小车提供满满的动力。
驱动模块的接口定义
下卖牛.png
其中,IN1和IN2是控制小车的左电机,IN3和IN4是控制小车的右电机,ENA和ENB引脚为输出使能管脚,高电平有效,IN1、IN2、IN3和IN4可以通过PWM脉冲调速。

电机控制:
IN1高电平,IN2低电平,左电机正传;
IN1低电平,IN2高电平,左电机反传;
IN3高电平,IN4低电平,右电机正传;
IN3低电平,IN4高电平,右电机反传。

1.2.2、超声波测距模块

超声波测距一般有4个管脚:
GND:接公共地
VCC:供5V电源
Trigger:触发控制,信号输入引脚
Echo:回响信号输出引脚
超声波测距原理是当发送的超声波遇到物体被发射回来,被接收端接收,然后通过发送信号到接收到回响的信号时间间隔可以测算出距离。image.png

测距过程如下:HaaS100给Trigger引脚至少10uS的脉冲触发信号,这时候超声波模块发射8个40KHz的方波,然后模块自动检测是否有信号返回。若检测到回响信号,会通过Echo引脚输出一个高电平脉冲,脉冲的宽度就是超声波从发射到返回的时间t。假设小车距离障碍物距离L,2L=vt,L=vt/2,其中v声音的传播速度340m/s。

1.2.3、红外避障模块

红外避障原理就是当障碍物靠近的时候,红外接收到的发射光强度越来越大,所以增大了输出的模拟信号,模拟信号接入比较器,经过比较器处理,输出数字信号。读取数字信号电平,就可以判断前方是否有障碍物。

1.2.4、测速模块

测速模块主要原理是由码盘结合光电传感器,传感器一端为发射光,另一端接收光,通过测量单位时间内脉冲个数得出小车的速度,本模块采用施密特触发器输出的信号非常稳定( 去抖)。

2、云端小小蛮驴产品创建

参考基于《一步步打造能手机远程管理的HaaS花卉养植系统》系列文章,一步步在物联网平台创建产品、对应的物模型以及设备。也可以通过载入TSL文件,一键生成物模型。

2.1、云端产品创建展示
创建了HaaS电动车的产品名称,然后定义了前进、后退、暂停、左转、右转等物模型属性。
image.png
按照一步步操作,云端创建产品、物模型以及设备以后,我们可以获取对应的四元组信息。

3、HaaS电动小车软件开发

3.1、配置初始化
HaaS100设备端电动小车参考代码的路径在:/application/example/auto_demo下。
从物联网云平台创建的产品时候,可以获取调试设备的四元组信息。如下所示:

//四元组信息初始化#define PRODUCT_KEY "*******"#define PRODUCT_SECRET "*******"#define DEVICE_NAME "*******"#define DEVICE_SECRET "*******"

对驱动电机芯片控制引脚配置

int auto_gpio_init(void)

{

temp_gpio.port = IN1_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = IN2_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = IN3_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = IN4_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = ENA_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = ENB_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);GPIO_Set(ENA_PORT,1); //使能驱动电机左GPIO_Set(ENB_PORT,1);//使能驱动电机右stop_ctl();

}
3.2、接收云端控制命令
接受处理云端的控制命令,包括后退、左转、右转、停止、前进等。

char *auto_temp[5]={"back","left","right","stop","front"};

static int user_property_set_event_handler(const int devid, const char *request, const int request_len)

{

int res = 0;char i =0,*auto_c;cJSON *root = cJSON_Parse(request)for(i=0;i<5;i++){auto_c = auto_temp[i];cJSON *value = cJSON_GetObjectItem(root,auto_c);if (value == NULL || !cJSON_IsNumber(value)) {EXAMPLE_TRACE("not find %d",i);        }else{goto hass_send;}}cJSON_Delete(root);if(i == 5){EXAMPLE_TRACE("not find %d",i);       return -1;}

hass_send:

switch(i){case 0:back_ctl();EXAMPLE_TRACE("---back");break;case 1:left_ctl();EXAMPLE_TRACE("---left");break;case 2:right_ctl();EXAMPLE_TRACE("---right");break;case 3:stop_ctl();EXAMPLE_TRACE("---stop");break;case 4:front_ctl();EXAMPLE_TRACE("---front");break;default:break;}res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,(unsigned char *)request, request_len);return 0;

}

3.3、HaaS电动车小程序开发
3.3.1、云端钉一体小程序SDK获取

git clone -b dev_3.1.0_haas https://github.com/alibaba/AliOS-Things.git

SDK相关代码及操作readme在application/miniapp/目录下。

3.3.2、SDK目录结构

/

├─ lib (存放依赖库的文件夹,用户无需关心)

│ ├─ @alicloud/pop-core (https://github.com/aliyun/openapi-core-nodejs-sdk)

│ ├─ kitx

│ └─ iot-packet.js (封装给用户的文件)

├─ pages (页面文件夹,用户在这里自定义页面,示例持续更新中)

│ └─ index (首页 选择进入不同示例)

│ ├─ index.axml

│ ├─ index.js

│ ├─ index.acss

│ └─ index.json

│ └─ HaasCar (示例1 HaaS小小蛮驴)

│ ├─ HaasCar.axml (页面布局文件)

│ ├─ HaasCar.js (控制逻辑,用户在这里定义交互行为)

│ ├─ HaasCar.acss (页面样式)

│ ├─ HaasCar.json (页面配置,用于配置页面标题等)

│ └─ HaasCar.TSL.json (示例对应的TSL文件,用户可以在物联网平台上导入该文件生成物模型)

│ └─ HaasFlower (示例2 HaaS养花,目录结构同 HaasCar)

├─ app.js (注册小程序,在这里进行全局参数配置,如 AccessKey)

├─ app.acss (小程序全局样式)

├─ app.json (小程序全局配置,可以在这里设置小程序打开的默认页面)

└─ others

3.3.3、SDK使用
使用小程序开发工具打开miniapp这个工程。

image.png

  • step1 在app.js填写AccessKeyID 以及 AccessKeySecret , 获取云端API调用权限

  • step2 填写目标设备 DeviceName 以及 ProductKey,这里是待控制的设备

// app.js

let accessKey = {

accessKeyId: '<- accessKeyId ->', // 填入阿里云平台生成的 assessKeyId 以及 Secret

accessKeySecret: '<- accessKeySecret ->',

}

// HaasCar.js

let device = {

DeviceName: '<- DeviceName ->', // 填入目标设备 DeviceName 以及 ProductKey

ProductKey: '<- ProductKey ->'

}

代码中提到的几个关键参数:

  • AccessKeyID AccessKeySecret

云账号AccessKey是用户访问阿里云API的密钥。(https://usercenter.console.aliyun.com/#/manage/ak)
安全起见,我们可以采取创建RAM子账号的形式,来对权限进行分离
image.png

创建完成后,需要手动分配权限,点击右侧,添加权限。我这里直接选择了 AdministratorAccess。 添加完成后如下。
image.png

  • DeviceName ProducKey

这两个参数在创建设备时生成。

3.3.4、编译验证
点击小程序IDE右上角“真机调试”按钮,等待二维码生成后,使用钉钉APP扫码,即可发起小程序。

image.png

3.4、效果展示

144444444.JPG

4、开发者技术支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot Admin 集成诊断利器 Arthas 实践

简介&#xff1a; Arthas 是 Alibaba 开源的 Java 诊断工具&#xff0c;具有实时查看系统的运行状况&#xff1b;查看函数调用参数、返回值和异常&#xff1b;在线热更新代码&#xff1b;秒解决类冲突问题&#xff1b;定位类加载路径&#xff1b;生成热点&#xff1b;通过网页诊…

设计方案,拿来吧你!

作者&#xff1a;零一来源&#xff1a;前端印象前言大家好&#xff0c;我是零一&#xff0c;今天要跟大家聊聊开发流程中不起眼的环节——设计方案。你们可能没听过&#xff0c;也可能只是简单得走过过场&#xff0c;别划走&#xff0c;这非常重要&#xff01;在字节&#xff0…

借力阿里云存储产品 延锋彼欧加速数字化重塑

简介&#xff1a; 延锋彼欧作为汽车外饰件生产的领航企业&#xff0c;通过基于业务和数据驱动的数字化管理&#xff0c;释放工业设备数据潜能提升产能。依托阿里云“稳定、安全、可靠、易用”的存储服务&#xff0c;延锋彼欧的发展步伐将更为稳健。 “一日骋千里&#xff0c;无…

英雄帖!移动云首批最有价值专家(MVP)招募开始了!

这是开发者的时代&#xff0c;这是价值重塑的时代。站在科技的潮头&#xff0c;我们期待去引领、去挖掘、去创造……移动云已迎来飞速发展的黄金期&#xff0c;移动云开发者社区将成为业界优秀开发者的聚集地。今天&#xff0c;移动云开发者社区正式开启移动云MVP首批招募&…

无责任畅想:云原生中间件的下一站

简介&#xff1a; 本文源自 2020 年 12 月 20 日作者在云原生社区 meetup 第二期北京站演讲 《Apache Dubbo-go 在云原生时代的实践与探索》的部分内容 自从以 2013 年开源的 docker 为代表的的容器技术和以 2014 年开源的 K8s 为代表的容器编排技术登上舞台之后&#xff0c;相…

深度剖析:Redis 分布式锁到底安全吗?看完这篇文章彻底懂了!

作者 | Kaito 来源 | 水滴与银弹阅读本文大约需要 20 分钟。大家好&#xff0c;我是 Kaito。这篇文章我想和你聊一聊&#xff0c;关于 Redis 分布式锁的「安全性」问题。Redis 分布式锁的话题&#xff0c;很多文章已经写烂了&#xff0c;我为什么还要写这篇文章呢&#xff1f;因…

Spring Boot 微服务性能下降九成!使用 Arthas 定位根因

简介&#xff1a; 接收到公司业务部门的开发反馈&#xff0c;应用在升级公司内部框架后&#xff0c;UAT&#xff08;预生产&#xff09;环境接口性能压测不达标。 背景 接收到公司业务部门的开发反馈&#xff0c;应用在升级公司内部框架后&#xff0c;UAT&#xff08;预生产&a…

阿里研究员:线下环境为何不稳定?怎么破

简介&#xff1a; 为什么线下环境的不稳定是必然的&#xff1f;我们怎么办&#xff1f;怎么让它尽量稳定一点&#xff1f; 这篇文章想讲两件事&#xff1a; 为什么线下环境[1]的不稳定是必然的&#xff1f;我们怎么办&#xff1f;怎么让它尽量稳定一点&#xff1f; 此外&#…

谁说技术男不浪漫!90后程序员2天做出猫咪情绪识别软件

整理 | 王晓曼出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;9月1日&#xff0c;一则关于#程序员2天做出猫咪情绪识别软件#的话题登上微博热搜&#xff0c;参与阅读的人数达到了8218.1万&#xff0c;讨论次数1.3万&#xff0c;引发网友们的热议。高手在民间&#…

闲鱼如何一招保证推荐流稳如泰山

简介&#xff1a; 风雨不动安如山 背景 近几年互联网的快速发展中&#xff0c;互联网业务发展越来越复杂&#xff0c;业务也被拆分得越来越细&#xff0c;阿里内部业务也发生着翻天覆地的变化&#xff0c;从最初的单体应用&#xff0c;到后面的分布式集群&#xff0c;再到最近…

电商直播平台如何借助容器与中间件实现研发效率提升100%?

简介&#xff1a; 经过实际场景验证及用户的综合评估&#xff0c;电商直播平台借助全面的云原生容器化能力和中间件产品能力&#xff0c;大幅提升开发部署运维效率达50%~100%&#xff0c;极大地提升了用户体验&#xff0c;为业务持续发展打下了坚实的基础。 前言 直播带货是近…

在游戏运营行业,Serverless 如何解决数据采集分析痛点?

简介&#xff1a; 众所周知&#xff0c;游戏行业在当今的互联网行业中算是一棵常青树。在疫情之前的 2019 年&#xff0c;中国游戏市场营收规模约 2884.8 亿元&#xff0c;同比增长 17.1%。2020 年因为疫情&#xff0c;游戏行业更是突飞猛进。玩游戏本就是中国网民最普遍的娱乐…

字节大战腾讯元宇宙;Docker 自己定制镜像;VMware 云桌面助力秦皇岛市第一医院;微软开源 Cloud Katana;...

NEWS本周新闻回顾字节大战腾讯元宇宙&#xff1a;布局社交产品Pixsoul&#xff0c;上线游戏“重启世界”字节投资的代码乾坤&#xff0c;已于近日正式上线了元宇宙游戏《重启世界》。就在两个月前&#xff0c;被称为“元宇宙第一股”的Roblox登陆国内&#xff0c;由腾讯改名为《…

从 RxJS 到 Flink:如何处理数据流?

简介&#xff1a; 前端开发的本质是什么&#xff1f;响应式编程相对于 MVVM 或者 Redux 有什么优点&#xff1f;响应式编程的思想是否可以应用到后端开发中&#xff1f;本文以一个新闻网站为例&#xff0c;阐述在前端开发中如何使用响应式编程思想&#xff1b;再以计算电商平台…

Spring RSocket:基于服务注册发现的 RSocket 负载均衡

简介&#xff1a; RSocket 作为通讯协议的后起之秀&#xff0c;核心是二进制异步化消息通讯&#xff0c;是否也能和 Spring Cloud 技术栈结合&#xff0c;实现服务注册发现、客户端负载均衡&#xff0c;从而更高效地实现面向服务的架构&#xff1f;这篇文章我们就讨论一下 Spri…

双非院校计算机系毕业的学生能进大厂吗?

谈到大厂&#xff0c;我们常常会主动匹配与之对应的高学历。其实不论是大厂还是小公司&#xff0c;都是会筛简历的&#xff0c;这个毋庸置疑。从大厂招聘的结果上看&#xff0c;高学历人才的数量占据大头&#xff0c;而那些成功进入BAT、网易等大厂的专科生、二本三本学生&…

Python - 深夜数据结构与算法之 Heap Binary Heap

目录 一.引言 二.堆与二叉堆介绍 1.Heap 堆 2.Binary Heap 二叉堆 3.HeapifyUp 添加节点 4.HeapifyDown 删除节点 5.Heap 时间复杂度 6.Insert & Delete 代码实现 三.经典算法实战 1.Smallest-K [M14] 2.Sliding-Window-Max [239] 3.Ugly-Number [264] 4.Top-…

如何 0 改造,让单体/微服务应用成为 Serverless Application

简介&#xff1a; 随着 2013 年以 Docker 为代表的容器技术、CNCF 基金会以及 K8s 的发展等&#xff0c;云原生开始被广大开发者所熟知。云原生时代之前还有两个阶段&#xff1a;一是自建 IDC 机房&#xff0c;二是简单地把原有的应用搬迁到云上。自建 IDC 机房很难获得高可用、…

一文了解阿里一站式图计算平台GraphScope

简介&#xff1a; 随着大数据的爆发&#xff0c;图数据的应用规模不断增长&#xff0c;现有的图计算系统仍然存在一定的局限。阿里巴巴拥有全球最大的商品知识图谱&#xff0c;在丰富的图场景和真实应用的驱动下&#xff0c;阿里巴巴达摩院智能计算实验室研发并开源了全球首个一…

c++如何禁用指定的键盘布局_Karabiner Elements for Mac 键盘键位自定义改键工具

文章来源于&#xff1a;风云社区Karabiner Elements for Mac 12.5Karabiner Elements&#xff08;早期是Karabiner&#xff0c;更早是KeyRemap4MacBook&#xff09;是功能强大且稳定的macOS键盘定制器。上【风云社区】&#xff0c;搜索软件名字&#xff0c;即可查看下载特征&am…