当前位置: 首页 > news >正文

Ai-WB2系列模组linux开发环境搭建

文章目录

    • 一、Ubuntu安装
        • 1.1 安装VMware Workstation Pro
        • 1.2 安装Ubuntu
    • 二、编译
    • 三、烧录固件到设备
        • 3.1 方式一:用命令行烧录
        • 3.2 方式二:用可视化软件烧录(windows)
    • 三、自定义工程如何修改Makefile
    • 四、开发资料

一、Ubuntu安装

在Linux下编译速度比windows快很多,一般推荐优先使用linux环境开发。Ubuntu是非常常见Linux操作系统。这里介绍下如何快速搭建Ubuntu虚拟机。

1.1 安装VMware Workstation Pro

下载 VMware Workstation Pro 16
安装
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
剩下的一直点下一步直到安装完成即可

激活:
打开VMware Workstation Pro ->帮助->输入许可证密钥。
学习用途:百度一下“vmware workstation 16许可证密钥”。
商业用途:到VMware官网购买正版许可证。

1.2 安装Ubuntu

直接下载安装好的Ubuntu20.04,百度网盘链接:
链接:https://pan.baidu.com/s/1xdTNaDjWQCaK38WbjrbA-A?pwd=z22u
提取码:z22u
下载完成后解压缩。

打开VMware Workstation Pro -> 文件 -> 打开 -> 选择下载并解压好的Ubuntu文件路径
在这里插入图片描述
直接开机即可,用户名和密码都是axk
在这里插入图片描述
Ubuntu虚拟机已经安装好Ai-WB2系列模组的开发环境,sdk位于主目录 -> bl_iot_sdk
在这里插入图片描述

下面括号内内容针对阅读此博文前已安装过Ubuntu的用户
{

  1. 无需重新安装Ubuntu
  2. SDK获取:git clone https://github.com/bouffalolab/bl_iot_sdk.git
  3. 打开终端,安装make,命令:sudo apt-get update、sudo apt-get install make
  4. 安装串口工具,此处选用cutecom,执行命令:sudo apt-get install cutecom
  5. 在 Linux 中添加用户到 dialout,执行命令:sudo usermod -a -G dialout $USER

}

二、编译

进入需要编译的工程目录,如进入hello world工程,命令:cd customer_app/get-start/helloworld,进行编译,命令./genromap
出现以下日志说明已经编译成功
在这里插入图片描述
编译生成的固件在build_out文件夹内: helloworld.bin

三、烧录固件到设备

3.1 方式一:用命令行烧录

  • 模组接线
Ai-WB2-XXUSB to TTL
TXRX
RXTX
IO8DTR
ENRTS
VDD3.3V
GNDGND

注意IO8在模组背面的圆点上

  • 开发板进入烧录模式:
    接USB到电脑,同时按下BURN和EN两个按键,先松开EN按键再松开BURN按键

将设备连接到虚拟机
在这里插入图片描述
设置串口日志波特率 :打开tools/flash_tool/chips/bl602/device_tree/bl_factory_params_IoTKitA_40M.dts,在uart{ }中设置,这里设置为115200
在这里插入图片描述

烧录执行命令行:

make flash_only

出现以下日志表示烧录成功
在这里插入图片描述
烧录完成后打开串口助手:sudo cutecom
在cutecom中设置好波特率后打开串口
在这里插入图片描述
复位模组后打印helloworld
在这里插入图片描述

3.2 方式二:用可视化软件烧录(windows)

下载软件:https://docs.ai-thinker.com/_media/ai-wb2/docs/v1.7.4-release.zip

  • 模组接线:
Ai-WB2-XXUSB to TTL
TXRX
RXTX
ENRTS
VDD3.3V
GNDGND

已验证支持的串口芯片有FT232、CH340。

开发板接线:
直接把usb接到电脑即可。
需要烧录的Parttion Table、Factory Params、Boot2 Bin文件分别位于:
v1.7.4-release\chips\bl602\partition\partition_cfg_4M.toml
v1.7.4-release\chips\bl602\device_tree\bl_factory_params_IoTKitA_40M.dts
v1.7.4-release\chips\bl602\builtin_imgs\boot2_isp_v5.6\boot2_isp_release.bin

编译生成的应用层固件烧录到Firmware Bin
注意
烧录工具和固件不要放到中文路径内
在这里插入图片描述

日志串口默认波特率为2000000,如果需要修改日志串口波特率可以在文件v1.7.4-release\chips\bl602\device_tree\bl_factory_params_IoTKitA_40M.dts内修改,修改后重新下载即可。
在这里插入图片描述

三、自定义工程如何修改Makefile

sdk里面的例程都比较简单,把所有的源文件都放在同一个文件夹里面就可以了,但是当我们的项目比较大的时候,会有很多的.c和.h文件,都放在同一个文件夹里面就会有点乱了,这时候把不同功能模块的代码放在不同的文件夹看起来就舒服很多了,怎么实现呢?

以最简单的helloworld工程为例,基于官方helloworld工程修改。
需求:

  1. 更改工程路径,把helloworld路径由bl_iot_sdk/customer_app/get-start/helloworld改为bl_iot_sdk/Ai-WB2-Demo/helloworld
  2. 增加一个文件夹component,component文件夹内新增hello.c和hello.h文件,把helloworld打印放到hello.c内

实现:

  1. 设置SDK路径
    修改helloworld内的Makeflie的sdk路径,由原来的
    BL60X_SDK_PATH_GUESS ?= $(shell pwd)
    BL60X_SDK_PATH ?= $(BL60X_SDK_PATH_GUESS)/…/…/…
    改为
    BL60X_SDK_PATH_GUESS ?= $(shell pwd)
    BL60X_SDK_PATH ?= $(BL60X_SDK_PATH_GUESS)/…/…

  2. 在component组件添加到Makeflie
    INCLUDE_COMPONENTS += component
    EXTRA_COMPONENT_DIRS += $(PROJECT_PATH)/component

  3. component文件夹内增加名为bouffalo.mk的Makeflie文件编译hello.c,bouffalo.mk内增加代码:

COMPONENT_OBJS := $(patsubst %.c,%.o, $(COMPONENT_SRCS))

完整工程见:https://gitee.com/chencong_cc/Ai-WB2-Demo.git

四、开发资料

安信可官网docs:https://docs.ai-thinker.com/wifi
bouffalolab官方SDK:https://github.com/bouffalolab/bl_iot_sdk,官方例程位于customer_app文件夹内。
编程指南:https://bouffalolab.github.io/bl_iot_sdk

相关文章:

  • [PyQt] Pycharm 配置 PyQt 开发环境
  • http和https分别是什么?
  • 如何在 Next.js 中构建进度条指示器
  • 【Bluetooth|蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程
  • K8s中的CNI网络模型
  • C++ Reference: Standard C++ Library reference: C Library: cmath: remainder
  • vue3.2新增指令v-memo的使用
  • 【语音之家】AI产业沙龙—VoxSRC-22说话人识别挑战赛快商通方案介绍
  • 案例分析-金融业网络安全攻防
  • 多线程之四(锁策略+CAS+synchronized)
  • Swoole 的异步 Task 任务详解
  • 高维列联表
  • 0-1规划的MATLAB求解
  • 第十四章第三节2:Java集合框架之队列Queue
  • 海思3559万能平台搭建:RTSP实时播放的优化
  • “大数据应用场景”之隔壁老王(连载四)
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Docker: 容器互访的三种方式
  • ES6--对象的扩展
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • mysql中InnoDB引擎中页的概念
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Yeoman_Bower_Grunt
  • 删除表内多余的重复数据
  • 十年未变!安全,谁之责?(下)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (175)FPGA门控时钟技术
  • (bean配置类的注解开发)学习Spring的第十三天
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)memcache、redis缓存
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)负载均衡,回话保持,cookie
  • (转)一些感悟
  • .bat批处理(六):替换字符串中匹配的子串
  • .java 9 找不到符号_java找不到符号
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 使用配置文件
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET6实现破解Modbus poll点表配置文件
  • //解决validator验证插件多个name相同只验证第一的问题
  • @Autowired @Resource @Qualifier的区别
  • @ResponseBody
  • @test注解_Spring 自定义注解你了解过吗?
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)
  • [Android] Upload package to device fails #2720