OpenHarmony轻量系统开发【13】鸿蒙小车开发

13.1 小车介绍

基于鸿蒙系统 + Hi3861 的WiFi小车

首先,我们得有一套WiFi小车套件,其实也是Hi3861 加上电机、循迹模块、超声波等模块。

小车安装完大概是这样:

13.2 电机驱动

我们这里先只做最简单的,驱动小车的电机,让小车跑起来。

电机的驱动板如下图,目前电机驱动芯片用的是L9110S芯片。

典型的应用电路如下图:

我们可以看到,如果要控制电机,我们芯片至少需要2路PWM信号,一路用于控制正转,一路用于控制反转。

然后我们小车有两个轮子,需要两个电机,所以我们需要 4 路IO口

基于鸿蒙系统 + Hi3861 的wifi小车,可以通过电脑、手机控制

需要注意,实际代码并没有使用PWM,而是直接IO控制。

void pwm_init(void)
{
	IoTGpioInit(IO_NAME_GPIO_0);
	IoTGpioInit(IO_NAME_GPIO_1);
	IoTGpioInit(IO_NAME_GPIO_9);
	IoTGpioInit(IO_NAME_GPIO_10);

	//寮曡剼澶嶇敤
	//hi_io_set_func(IO_NAME_GPIO_0, 0); 
    //hi_io_set_func(IO_NAME_GPIO_1, 0); 	
	//hi_io_set_func(IO_NAME_GPIO_9, 0); 
    //hi_io_set_func(IO_NAME_GPIO_10, 0); 
}

//鍋滄
void pwm_stop(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE1);
    gpio_control(GPIO1, IOT_GPIO_VALUE1);
    gpio_control(GPIO9, IOT_GPIO_VALUE1);
    gpio_control(GPIO10, IOT_GPIO_VALUE1);
}
void car_stop(void)
{
	car_info.cur_status = car_info.go_status;

	printf("pwm_stop \r\n");

	pwm_stop();
}

//鍓嶈繘
void pwm_forward(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE1);
    gpio_control(GPIO1, IOT_GPIO_VALUE0);
    gpio_control(GPIO9, IOT_GPIO_VALUE1);
    gpio_control(GPIO10, IOT_GPIO_VALUE0);

	//鍚姩A璺疨WM
	//左轮
	//IoTPwmStart(PWM_PORT_PWM3, 64000, 64000);
	//右轮
	//IoTPwmStart(PWM_PORT_PWM0, 64000, 64000);
}
void car_forward(void)
{
	if(car_info.go_status != CAR_STATUS_FORWARD)
	{
		//鐩存帴閫€鍑?
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
		//鐘舵€佹病鏈夊彉鍖栵紝鐩存帴鎺ㄥ嚭
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_forward \r\n");

	pwm_forward();

	step_count_update();
}

//鍚庨€€
void pwm_backward(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE0);
    gpio_control(GPIO1, IOT_GPIO_VALUE1);
    gpio_control(GPIO9, IOT_GPIO_VALUE0);
    gpio_control(GPIO10, IOT_GPIO_VALUE1);

	//鍚姩A璺疨WM
	//IoTPwmStart(PWM_PORT_PWM4, 64000, 64000);
	//IoTPwmStart(PWM_PORT_PWM1, 64000, 64000);
}
void car_backward(void)
{
	if(car_info.go_status != CAR_STATUS_BACKWARD)
	{
		//鐩存帴閫€鍑?
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
		//鐘舵€佹病鏈夊彉鍖栵紝鐩存帴鎺ㄥ嚭
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_backward \r\n");

	pwm_backward();

	step_count_update();
}

//宸﹁浆
void pwm_left(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE0);
    gpio_control(GPIO1, IOT_GPIO_VALUE0);
    gpio_control(GPIO9, IOT_GPIO_VALUE1);
    gpio_control(GPIO10, IOT_GPIO_VALUE0);

	//鍚姩A璺疨WM
	//IoTPwmStart(PWM_PORT_PWM0, 64000, 64000);

}
void car_left(void)
{
	if(car_info.go_status != CAR_STATUS_LEFT)
	{
		//鐩存帴閫€鍑?
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
		//鐘舵€佹病鏈夊彉鍖栵紝鐩存帴鎺ㄥ嚭
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_left \r\n");

	pwm_left();

	step_count_update();
}

//鍙宠浆
void pwm_right(void)
{
	//鍏堝仠姝WM
    gpio_control(GPIO0, IOT_GPIO_VALUE1);
    gpio_control(GPIO1, IOT_GPIO_VALUE0);
    gpio_control(GPIO9, IOT_GPIO_VALUE0);
    gpio_control(GPIO10, IOT_GPIO_VALUE0);

	//鍚姩A璺疨WM
	//IoTPwmStart(PWM_PORT_PWM3, 64000, 64000);
}
void car_right(void)
{
	if(car_info.go_status != CAR_STATUS_RIGHT)
	{
		//鐩存帴閫€鍑?
		return ;
	}
	if(car_info.cur_status == car_info.go_status)
	{
		//鐘舵€佹病鏈夊彉鍖栵紝鐩存帴鎺ㄥ嚭
		return;
	}

	car_info.cur_status = car_info.go_status;

	printf("pwm_right \r\n");

	pwm_right();

	step_count_update();
}

最后,要使用pwm功能,我们需要修改

device/soc/hisilicon/hi3861v100/sdk_liteos/build/config/usr_config.mk

增加这两行,这里是打开PWM功能

CONFIG_PWM_SUPPORT=y

CONFIG_PWM_HOLD_AFTER_REBOOT=y

13.3 WiFi控制部分

我们在小车上面简单编写一个UDP程序,监听50001端口号。这里使用的通信格式是json,小车收到UDP数据后,解析json,并根据命令执行相应的操作,例如前进、后退、左转、右转等,代码如下:

电脑端,使用C#编写一个测试程序,可以手动输入小车的IP地址,也可以不输入IP地址,这样,电脑端程序会发送广播包给小车,也可以起到控制的功能。

13.4 WiFi热点连接

注意,我这里WiFi小车固件默认连接热点的ssid是:

读者需要自己修改成自己的热点。

文件:sta_entry.c

小车的源码,C#控制端的代码均开源,大家可以自由修改,发挥自己的想象,创造出更厉害炫酷的DIY产品。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ......

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ......

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ......

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题

2.性能优化方向

3.架构方向

4.鸿蒙开发系统底层方向

5.鸿蒙音视频开发方向

6.鸿蒙车载开发方向

7.鸿蒙南向开发方向

相关推荐
Cachel wood9 分钟前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
学代码的小前端10 分钟前
0基础学前端-----CSS DAY9
前端·css
joan_8514 分钟前
layui表格templet图片渲染--模板字符串和字符串拼接
前端·javascript·layui
还是大剑师兰特37 分钟前
什么是尾调用,使用尾调用有什么好处?
javascript·大剑师·尾调用
m0_748236111 小时前
Calcite Web 项目常见问题解决方案
开发语言·前端·rust
Watermelo6171 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_748248941 小时前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_748235611 小时前
从零开始学前端之HTML(三)
前端·html
枫叶丹43 小时前
【HarmonyOS之旅】HarmonyOS开发基础知识(三)
华为od·华为·华为云·harmonyos
一个处女座的程序猿O(∩_∩)O3 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js