当前位置:首页 >热点 >OpenHarmony设备开发(八) 即可一键连接小车建立TCP连接

OpenHarmony设备开发(八) 即可一键连接小车建立TCP连接

2024-06-29 10:03:17 [百科] 来源:避面尹邢网

OpenHarmony设备开发(八)- 遥控小车

作者:X丶昕雪 系统 OpenHarmony 手机碰一碰小车上的备开NFC标签,即可一键连接小车建立TCP连接,备开与此同时拉起小车控制软件,备开最终完成对小车的备开控制。

​​想了解更多关于开源的备开内容,请访问:​​

OpenHarmony设备开发(八) 即可一键连接小车建立TCP连接

​​51CTO 开源基础软件社区​​

OpenHarmony设备开发(八) 即可一键连接小车建立TCP连接

​​https://ost.51cto.com​​

OpenHarmony设备开发(八) 即可一键连接小车建立TCP连接

前言

智能小车设备可以接收手机发送的备开操控指令,得以完成手机操控小车。备开智能小车还实现无感连接,备开无论哪一个智能小车设备,备开手机只需要对着智能小车上的备开标签碰一碰,即可连接到该小车并自动打开相对应的备开操作软件,对该小车进行控制,备开操作简单易懂,备开易于上手。备开

实现方式

  1. 3861鸿蒙小车控制两个电机,备开并打开热点以供手机连接。
  2. NFC标签写入鸿蒙小车的SSID,PSK,IP地址。
  3. 手机碰一碰小车上的NFC标签,即可一键连接小车建立TCP连接,与此同时拉起小车控制软件,最终完成对小车的控制。

工程版本

  • 系统版本/API版本:OpenHarmony 3.1 release。
  • IDE版本:DevEco Device Tool Release v3.1.200。

源代码

头文件

对于下面要用到的API接口,我们要引用的头文件有以下:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
//os
#include "cmsis_os2.h"
#include "ohos_init.h"
//wifi and tcp
#include "wifi_device.h"
#include "wifi_hotspot.h"
#include "wifi_error_code.h"
#include "lwip/netifapi.h"
#include "lwip/sockets.h"
// io
#include "iot_gpio.h"
#include <hi_gpio.h>
#include <hi_io.h>

控制

小车轮子控制:

GPIO0和GPIO1控制左轮,GPIO9和GPIO10控制右轮。

GPIO0和GPIO9使能是正方向,GPIO1和GPIO10使能是反方向,同时使能便是停止。

#define GPIO0 0
#define GPIO1 1
#define GPIO9 9
#define GPIO10 10
void my_car_init(void)
{ //初始化
IoTGpioInit(GPIO0);
IoTGpioInit(GPIO1);
IoTGpioInit(GPIO10);
IoTGpioInit(GPIO9);//IO模式
hi_io_set_func(GPIO0, 0);
hi_io_set_func(GPIO1, 0);
hi_io_set_func(GPIO10, 0);
hi_io_set_func(GPIO9, 0);//输出模式
IoTGpioSetDir(GPIO0, 1);
IoTGpioSetDir(GPIO1, 1);
IoTGpioSetDir(GPIO10, 1);
IoTGpioSetDir(GPIO9, 1);
car_stop();
}
void car_backward(void)
{
IoTGpioSetOutputVal(GPIO0, IOT_GPIO_VALUE0); //左
IoTGpioSetOutputVal(GPIO1, IOT_GPIO_VALUE1);
IoTGpioSetOutputVal(GPIO9, IOT_GPIO_VALUE0); //右轮
IoTGpioSetOutputVal(GPIO10, IOT_GPIO_VALUE1);
}
void car_forward(void)
{
IoTGpioSetOutputVal(GPIO0, IOT_GPIO_VALUE1);
IoTGpioSetOutputVal(GPIO1, IOT_GPIO_VALUE0);
IoTGpioSetOutputVal(GPIO9, IOT_GPIO_VALUE1);
IoTGpioSetOutputVal(GPIO10, IOT_GPIO_VALUE0);
}
void car_left(void)
{
IoTGpioSetOutputVal(GPIO0, IOT_GPIO_VALUE0);
IoTGpioSetOutputVal(GPIO1, IOT_GPIO_VALUE0);
IoTGpioSetOutputVal(GPIO9, IOT_GPIO_VALUE1);
IoTGpioSetOutputVal(GPIO10, IOT_GPIO_VALUE0);
}
void car_right(void)
{
IoTGpioSetOutputVal(GPIO0, IOT_GPIO_VALUE1);
IoTGpioSetOutputVal(GPIO1, IOT_GPIO_VALUE0);
IoTGpioSetOutputVal(GPIO9, IOT_GPIO_VALUE1);
IoTGpioSetOutputVal(GPIO10, IOT_GPIO_VALUE1);
}
void car_stop(void)
{
IoTGpioSetOutputVal(GPIO0, IOT_GPIO_VALUE1);
IoTGpioSetOutputVal(GPIO1, IOT_GPIO_VALUE1);
IoTGpioSetOutputVal(GPIO9, IOT_GPIO_VALUE1);
IoTGpioSetOutputVal(GPIO10, IOT_GPIO_VALUE1);
}

通信

WIFI

  1. 回调函数配置。
  2. WIFI_AP配置。
  3. 注册netif结构体。
  4. 配置netif(配置DHCP)。
  5. 关闭再打开DHCP(必须先关闭再重新打开)。
#define AP_SSID "FSR"
#define AP_PSK "12345678"
#define _PROT_ 8888
#define TCP_BACKLOG 10
static struct netif *g_lwip_netif = NULL;
static int g_apEnableSuccess = 0;
WifiEvent g_wifiEventHandler = { 0};
WifiErrorCode error;
//注册wifi事件的回调函数
g_wifiEventHandler.OnHotspotStaJoin = OnHotspotStaJoinHandler;
g_wifiEventHandler.OnHotspotStaLeave = OnHotspotStaLeaveHandler;
g_wifiEventHandler.OnHotspotStateChanged = OnHotspotStateChangedHandler;
//指定WiFi回调函数
error = RegisterWifiEvent(&g_wifiEventHandler);
//设置指定的热点配置
HotspotConfig config = { 0};
//初始化热点相关配置
strcpy(config.ssid, AP_SSID);
strcpy(config.preSharedKey, AP_PSK);
config.securityType = WIFI_SEC_TYPE_PSK;
config.band = HOTSPOT_BAND_TYPE_2G; // 2.4GHz
config.channelNum = 7;
//配置wifi热点
error = SetHotspotConfig(&config);
error = EnableHotspot();
//启动dhcp
g_lwip_netif = netifapi_netif_find("ap0");
if (g_lwip_netif)
{
ip4_addr_t bp_gw;
ip4_addr_t bp_ipaddr;
ip4_addr_t bp_netmask;
IP4_ADDR(&bp_gw, 192, 168, 1, 1); /* input your gateway for example: 192.168.1.1 */
IP4_ADDR(&bp_ipaddr, 192, 168, 1, 1); /* input your IP for example: 192.168.1.1 */
IP4_ADDR(&bp_netmask, 255, 255, 255, 0); /* input your netmask for example: 255.255.255.0 */
netifapi_netif_set_addr(g_lwip_netif, &bp_ipaddr, &bp_netmask, &bp_gw);
//关闭
netifapi_dhcps_stop(g_lwip_netif);
netifapi_dhcps_start(g_lwip_netif, 0, 0);
}

TCP

//在sock_fd 进行监听,在 new_fd 接收新的链接
int sock_fd, new_fd;
char recvbuf[10];
/

(责任编辑:焦点)

    推荐文章
    热点阅读