在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3628|回复: 0

[DIY] 技术干货实践:如何在树莓派模拟运行陀螺仪扫地机

[复制链接]
发表于 2020-6-2 15:48:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 智能物联研究社 于 2020-6-2 17:17 编辑

本篇文章主要讲述如何在树莓派上模拟运行一个陀螺仪扫地机的设备并连接涂鸦云。

步骤

第 1 步:陀螺仪扫地机原理简述

152711tduowld2tdlfuwu3.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号面板

153113wdmdpqx13m4iauuq.png
153254r5c50c7bffcuucnw.png
153310lks7yy3su77ljddi.png

2号 3号面板没有用到电源开关power功能点,创建产品时请删除

第 4 步:开发准备

产品创建


注册涂鸦开发者账号,并完成认证

开发平台链接:iot.tuya.com/?_source=50ad109033ec33aa9c41c459dd6e0a4e

创建扫地机产品,如下箭头所指为PID,为代码中的PRODUCT_KEY宏
153349h6p646ydfcpdhnwu.png

硬件准备
树莓派采用 Raspberry Pi 3 Model B

153423pm4gl11r4olm0xuo.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上展现机器行走的效果,如下


153602n01luu1xujxx31x3.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;
注:涂鸦智能是一个全球化智能平台, “AI+IoT”开发者平台, 也是世界排名前列的语音AI交互平台, 连接消费者、制造品牌、OEM厂商和零售连锁的智能化需求, 为客户提供一站式人工智能物联网的解决方案, 并且涵盖了硬件接入、云服务以及APP软件开发三方面, 形成人工智能+制造业的服务闭环, 为消费类IoT智能设备提供B端技术及商业模式升级服务, 从而满足消费者对硬件产品更高的诉求。

如果您有产品/行业智能化的相关需求,可点击链接联系我们:promotion.tuya.com/cooperation_OW?_source=d691246c403a212c4d3586a6f6820158

或者添加涂鸦智能官方助手号微信:iotkaifazhe,把具体需求告诉我们,会有专人为您提供一对一咨询服务哦!


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-18 16:33 , Processed in 0.111026 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表