Автомобиль с Wi-Fi на базе системы Hongmeng + Hi3861
Прежде всего, нам нужен автомобильный комплект Wi-Fi, который на самом деле представляет собой Hi3861 плюс двигатель, модуль слежения, ультразвуковой и другие модули.
После установки автомобиля это выглядит примерно так:
Сначала мы сделаем только самое простое: запустим двигатель автомобиля, чтобы машина поехала.
Плата драйвера двигателя показана ниже. В текущем чипе драйвера двигателя используется чип L9110S.
Типичная схема приложения показана ниже:
Мы видим, что если мы хотим управлять двигателем, нашему чипу необходимы как минимум два сигнала ШИМ: один для управления прямым вращением и один для управления обратным вращением.
Тогда у нашей машины два колеса и два двигателя, поэтому нам нужно 4 порта ввода-вывода.
Автомобиль Wi-Fi на базе системы Hongmeng + Hi3861 может управляться с помощью компьютера или мобильного телефона.
Следует отметить, что в реальном коде используется не ШИМ, а прямое управление вводом-выводом.
void pwm_init(void)
{
IoTGpioInit(IO_NAME_GPIO_0);
IoTGpioInit(IO_NAME_GPIO_1);
IoTGpioInit(IO_NAME_GPIO_9);
IoTGpioInit(IO_NAME_GPIO_10);
//寮曡剼澶 Di椤
//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);
//Олово婬Вращающийся 稨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)
{
//Чжун Жо €佹 цепочка болезней 夊剉鍖浵纴鐩cum崴玺ㄥнести
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);
//Олово婬Вращающийся 稨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)
{
//Чжун Жо €佹 цепочка болезней 夊剉鍖浵纴鐩cum崴玺ㄥнести
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);
//Олово婬Вращающийся 稨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)
{
//Чжун Жо €佹 цепочка болезней 夊剉鍖浵纴鐩cum崴玺ㄥнести
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);
//Олово婬Вращающийся 稨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)
{
//Чжун Жо €佹 цепочка болезней 夊剉鍖浵纴鐩cum崴玺ㄥнести
return;
}
car_info.cur_status = car_info.go_status;
printf("pwm_right \r\n");
pwm_right();
step_count_update();
}
Наконец, чтобы использовать функцию ШИМ, нам нужно изменить
device/soc/hisilicon/hi3861v100/sdk_liteos/build/config/usr_config.mk
Добавьте эти две строки, чтобы включить функцию ШИМ.
CONFIG_PWM_SUPPORT=y
CONFIG_PWM_HOLD_AFTER_REBOOT=y
13.3 Часть управления Wi-Fi
Мы просто пишем на машине UDP-программу, которая прослушивает номер порта 50001. Используемый здесь формат связи — json. После того, как автомобиль получает данные UDP, он анализирует json и выполняет соответствующие операции в соответствии с командой, такие как вперед, назад, поворот налево, поворот направо и т. д. Код выглядит следующим образом:
На стороне компьютера используйте C# для написания тестовой программы. Вы можете вручную ввести IP-адрес автомобиля, или вам не нужно вводить IP-адрес. Таким образом, компьютерная программа отправит широковещательный пакет в автомобиль. , который также может иметь функцию управления.
13.4 Подключение к точке доступа Wi-Fi
Обратите внимание, что SSID по умолчанию в автомобильной прошивке WiFi для подключения к точке доступа:
Читателям необходимо изменить его под свои собственные горячие точки.
Файл: sta_entry.c
Исходный код автомобиля и конечный код управления C# имеют открытый исходный код. Вы можете свободно изменять их и использовать свое воображение для создания более мощных и крутых продуктов своими руками.
Если вы считаете, что этот контент вам очень полезен, я хотел бы предложить вам оказать мне три небольшие услуги: