OpenHarmony轻量系统开发【13】鸿蒙小车开发 原创 精华

连志安
发布于 2020-10-28 12:47
浏览
27收藏

摘要:本文简单介绍鸿蒙系统 + Hi3861 的WiFi小车开发

适合群体:适用于润和Hi3861开发板

文中所有代码仓库:https://gitee.com/qidiyun/hihope-3861-smart-home-kit 

 

13.1 小车介绍

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

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

小车安装完大概是这样:

OpenHarmony轻量系统开发【13】鸿蒙小车开发-鸿蒙开发者社区

 

13.2 电机驱动

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

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

OpenHarmony轻量系统开发【13】鸿蒙小车开发-鸿蒙开发者社区

典型的应用电路如下图:

OpenHarmony轻量系统开发【13】鸿蒙小车开发-鸿蒙开发者社区

   我们可以看到,如果要控制电机,我们芯片至少需要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

OpenHarmony轻量系统开发【13】鸿蒙小车开发-鸿蒙开发者社区

 

13.3 WiFi控制部分

 

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

OpenHarmony轻量系统开发【13】鸿蒙小车开发-鸿蒙开发者社区

 

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

 

OpenHarmony轻量系统开发【13】鸿蒙小车开发-鸿蒙开发者社区

 

13.4 WiFi热点连接

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

 

OpenHarmony轻量系统开发【13】鸿蒙小车开发-鸿蒙开发者社区

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

文件:sta_entry.c

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



相关代码这里有:​​https://gitee.com/hihope_iot/HiHope_Pegasus_Doc/tree/master/%E3%80%902%E3%80%91%E8%AF%BE%E7%A8%8B%E6%96%87%E6%A1%A3%E9%85%8D%E5%A5%97%E4%BE%8B%E7%A8%8B​


代码是 car_test

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2023-2-28 17:48:59修改
24
收藏 27
回复
举报
15条回复
按时间正序
/
按时间倒序
wg_caddBjEB
wg_caddBjEB

我又来三连了(๑•̀ㅂ•́)و✧

1
回复
2020-10-28 15:27:22
archangle
archangle

这次的小车源码一定要拿回去好好研究下,谢谢分享。

回复
2020-10-28 16:02:35
gordonlonglong
gordonlonglong

这个玩具不错!!!我也去试试!!!

1
回复
2020-10-28 16:05:57
鲜橙加冰
鲜橙加冰

gooooooooooooooooooooooooood.

回复
2020-10-29 10:11:01
mb5fed92856e215
mb5fed92856e215

这个【编译好可以直接烧录的固件】Hi3861_wifii.zip烧录进去之后led屏什么都不显示

3
回复
2021-1-25 17:12:37
张荣超_九丘教育
张荣超_九丘教育

好文👍👍👍

回复
2021-2-20 00:30:22
wx60851c7fce1f4
wx60851c7fce1f4 回复了 mb5fed92856e215
这个【编译好可以直接烧录的固件】Hi3861_wifii.zip烧录进去之后led屏什么都不显示

我的也是,现在都不动了

 

1
回复
2021-4-27 14:31:51
wx613d9b081fd2e
wx613d9b081fd2e 回复了 wx60851c7fce1f4
我的也是,现在都不动了

我的也是,点小车控制程序里的前进后退也没反应。你们后来解决了吗。

回复
2021-9-12 20:41:58
爱吃土豆丝的打工人
爱吃土豆丝的打工人

好文   三连。。。

回复
2021-9-13 15:23:45
连志安
连志安 回复了 wx613d9b081fd2e
我的也是,点小车控制程序里的前进后退也没反应。你们后来解决了吗。

 

需要修改热点哈,小车默认连接的WiFi热点是

需要按照你自己的热点来修改

回复
2022-2-8 17:39:01
mb61b33cc3a4300
mb61b33cc3a4300

怎么改热点阿

回复
2022-2-14 18:00:06
qq6222cfe457ae4
qq6222cfe457ae4

lwip/ip_addr.h文件显示不存在

回复
2022-3-5 11:30:48
wx621c370633f88
wx621c370633f88 回复了 连志安
需要修改热点哈,小车默认连接的WiFi热点是 需要按照你自己的热点来修改

老师您好,我已经修改成自己的热点了但是点小车控制程序还是不管用,请问这个小车IP是什么呢?

回复
2022-3-8 16:41:24
wx623436c9b30e6
wx623436c9b30e6

小车的IP地址怎么看?

 

回复
2022-3-25 20:10:58
wx625792dabf3c2
wx625792dabf3c2

自己编译出来的Hi3861_wifiiot_app_allinone.bin只有702K,能接收到wifi信号,但是无法控制电机,怎么回事?

回复
2022-4-30 17:27:37
回复
    相关推荐