电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
技术干货实践:如何在树莓派模拟运行陀螺仪扫地机
分 享
扫描二维码分享
技术干货实践:如何在树莓派模拟运行陀螺仪扫地机
树莓派
陀螺仪
扫地机
赵凡
关注
发布时间: 2020-09-08
丨
阅读: 1516
这里说明在树莓派上模拟运行一个陀螺仪扫地机的设备并连接涂鸦云。 步骤 #### 第 1 步:陀螺仪扫地机原理简述 ![](https://cf04.ickimg.com/bbsimages/202009/55670b2131f0877491f275a3208bedcb.png) #### 第 2 步:涂鸦陀螺仪扫地机传输协议 // 涂鸦陀螺仪地图传输协议 typedef struct { uint8_t x; uint8_t y; uint8_t type; } ST_POT; /@@* 坐标点类型 */ enum enum_point_type { point_type_current = 0x00, // 当前点 point_type_barrier, // 障碍点 point_type_cleaned, // 已清扫点 point_type_charge, // 充电桩 }; #### 第 3 步:涂鸦陀螺仪扫地机公版面板 如下,从上到下依次是 1号面板 2号面板 3号面板 [![](http://tuyainc.github.io/TUYA_IOT_SDK_doc/zh-hans/resource/images/gyro1.png)](http://tuyainc.github.io/TUYA_IOT_SDK_doc/zh-hans/resource/images/gyro1.png) ![](http://tuyainc.github.io/TUYA_IOT_SDK_doc/zh-hans/resource/images/gyro2.png) ![](http://tuyainc.github.io/TUYA_IOT_SDK_doc/zh-hans/resource/images/gyro3.png) 2号 3号面板没有用到电源开关power功能点,创建产品时请删除 #### 第 4 步:开发准备 **产品创建** **点击注册 [涂鸦IoT开发平台](https://auth.tuya.com/register?from=https%3A%2F%2Fiot.tuya.com%2F&_source=ce4d881f8b0effd63e816e138883d98a "涂鸦IoT开发平台")** 并完成认证 创建扫地机产品,如下箭头所指为PID,为代码中的PRODUCT_KEY宏 ![](http://tuyainc.github.io/TUYA_IOT_SDK_doc/zh-hans/resource/images/gyro2_create.png) **硬件准备 **树莓派采用 Raspberry Pi 3 Model B ![](http://tuyainc.github.io/TUYA_IOT_SDK_doc/zh-hans/resource/images/raspberry-pi-3-hero-1-1571x1080.jpg) **硬件配置** Quad Core 1.2GHz Broadcom BCM2837 64bit CPU 1GB RAM BCM43438 wireless LAN,开发配网,连接到涂鸦云 Bluetooth Low Energy (BLE) on board 100 Base Ethernet,用于ssh登录开发板调试用 #### 调试方法 为方便,直接在ubuntu虚拟机的Terminal通过ssh登录到树莓派开发板上调试。 操作方法:树莓派网口和路由器的lan口相连,登录路由器获取树莓派ip地址,我这里为192.168.56.107;ubuntu虚拟机网络设置为桥接模式,PC主机和树莓派连接到同一路由器下 tuya@E480:~$ ssh root@192.168.56.107 root@192.168.56.107's password: Last login: Thu Oct 24 18:47:17 2019 from 192.168.56.100 root@RasPi:~# 确认无线网卡支持的配网模式 小贴士:无线网 iw list命令可以查看linux系统设备下无线网卡详细信息 root@RasPi:~# iw list Wiphy phy0 Supported interface modes: 无线网卡支持的工作模式 * IBSS * managed station客户端模式 * AP 无线接入点模式,这里可用于开发tuyasdk的ap配网 * P2P-client * P2P-GO * P2P-device ......省略其他信息 如上配置,这个网卡不支持sniffer模式,无法开发SmartConfig配网模式 #### 第 5 步:基本实现思路 这里不是一个真实的扫地机,从涂鸦云导出真实扫地机设备行走产生的地图坐标数据保存到磁盘文件 代码里新增一个线程负责从文件定时读取数据上报涂鸦云,以在APP上展现机器行走的效果,如下 ![](http://tuyainc.github.io/TUYA_IOT_SDK_doc/zh-hans/resource/images/gyro2.png) #### 第 6 步:软件开发说明 陀螺仪扫地机为wifi单品开发,参考TUYA_IOT_SDK说明 工具链获取,这里推荐一个第三方资源,涂鸦不提供芯片工具链。 demo源码获取 demo功能说明 支持AP配网模式 支持涂鸦陀螺仪三种陀螺仪面板 支持设备OTA 编译时可选是运行在ubuntu设备上还是树莓派 #### 第 7 步:关键代码说明 代码位置:src/gyro_wifi_dev/tuya_iot_wifi_net.c 设置网卡工作模式 // 设置当前WIFI工作模式 OPERATE_RET hwl_wf_wk_mode_set(IN CONST WF_WK_MD_E mode) { if defined(USE_RASPI) switch (mode){ case WWM_STATION:{ sys_shell("ifconfig %s down", WLAN_DEV); sys_shell("iwconfig %s mode Managed", WLAN_DEV); sys_shell("ifconfig %s up", WLAN_DEV); }break; case WWM_SOFTAP:{ // handle in hwl_wf_ap_start() break; } case WWM_STATIONAP:break; default:break; } endif return OPRT_OK; } 开启无线网卡热点 // AP配网模式下开启热点 OPERATE_RET hwl_wf_ap_start(IN CONST WF_AP_CFG_IF_S *cfg) { PR_DEBUG("Start AP SSID:%s", cfg->ssid); if defined(USE_RASPI) sys_shell("ifconfig "WLAN_DEV" "DEFAULT_IP_ADDR); sys_shell("iwconfig %s mode Managed", WLAN_DEV); kill_process("hostapd"); kill_process("udhcpd"); kill_process("wpa_supplicant"); sys_shell("hostapd -B " HOSTAPD_CONF); sys_shell("udhcpd -f " UDHCPD_CONF " &"); endif return OPRT_OK; } 关闭无线网卡热点 // AP配网模式下停止热点 OPERATE_RET hwl_wf_ap_stop(VOID) { PR_DEBUG("Stop Ap Mode"); if defined(USE_RASPI) kill_process("hostapd"); kill_process("udhcpd"); endif return OPRT_OK; } 连接路由器 // 使用指定SSID和PASSWD连接WIFI OPERATE_RET hwl_wf_station_connect(IN CONST CHAR_T *ssid,IN CONST CHAR_T *passwd) { PR_DEBUG("STA Con AP ssid:%s passwd:%s", ssid, passwd); if defined(USE_RASPI) // UserTODO sys_shell("sed -i '/ssid/c\\ ssid=\"%s\"' " WPA_SUPPLICANT_CONF,ssid); sys_shell("sed -i '/psk/c\\ psk=\"%s\"' " WPA_SUPPLICANT_CONF,passwd); // sys_shell("wpa_supplicant -Dnone -B -i" WLAN_DEV " -c" WPA_SUPPLICANT_CONF); // 加Dnone 不可行 sys_shell("wpa_supplicant -B -i" WLAN_DEV " -c" WPA_SUPPLICANT_CONF); sys_shell("udhcpc -i" WLAN_DEV); // sys_shell("dhclient"" "WLAN_DEV); endif return OPRT_OK; } 获取当前WIFI联网状态 OPERATE_RET hwl_wf_station_stat_get(OUT WF_STATION_STAT_E *stat) { if defined(USE_RASPI) // UserTODO NW_IP_S current_ip; // 上一次获取的ip memset(¤t_ip,0,sizeof(current_ip)); hwl_wf_get_ip(WF_STATION,¤t_ip); if(strcmp(current_ip.ip, DEFAULT_IP_ADDR)){ *stat = WSS_GOT_IP; }else{ *stat = WSS_CONN_FAIL; } else *stat = WSS_GOT_IP; endif return OPRT_OK; } 借助涂鸦IoT开发平台即可快速完成一款智能化产品: https://auth.tuya.com/register?from=https%3A%2F%2Fiot.tuya.com%2F&_source=ce4d881f8b0effd63e816e138883d98a
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
赵凡
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交