前言

大学毕业那会儿本来想尝试一下物联网,后来由于工作比较忙并且不在物联网这个行业,买的一块机智云的 Gokit3 开发板一直放在家里几乎都快遗忘了。最近华为开源 HarmonyOS 2.0,内心有点激动,想起当年在实验室的时光,想买一块鸿蒙的开发板学习一下,然后突然想起家里的 Gokit3 开发板还一直没有玩过,那就尝试从Gokit3 开始入门学习一下。

Gokit3 开发套件

Gokit3 是 GoKit 产品系列的第三代,支持 MCU、SoC、BLE、语音、模式切换等特性。
GoKit3 有三种类型的套件:

  • GoKit3(S)-SoC 版:分体式的设计方案,即底板( SoC 方式应去掉)+功能板+模组。
    • 乐鑫模组(ESP-12F)
    • MCU 和 SoC 两种连接方式
    • AirLink 和 SoftAP 两种方式配置入网
  • GoKit3(V)-语言模组版:整体式的设计方案,较低的开发成本。
    • Lark7618 语音模组
    • MCU 连接方式
    • SoftAP 和音波配置入网
    • 支持本地语音识别、识别词条自定义、提示音自定义及 P0 数据点关联;
  • GOKit3(H)-高性能模组版:高性能模组
    • 580 MHz主频、64MB DDR、16MB SPI Flash
    • OpenWRT系统
    • MCU/SoC 连接方式
    • 可用于机器人/无人机/家庭网关等

      GoKit3(S) 功能扩展板

      GoKit3(S)采用一体式SOC解决方案,并具有一定的拓展性,图如下:

Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图1
ESP8266 :乐鑫的一款高性能无线WiFi模组,可直接控制扩展板片上资源。
功能扩展板:兼容多种型号的WiFi模组,用于连接各种外设传感器,用于模拟实际应用功能。
目前支持的 SoC 方案模组有 ESP8266、Hi3518E、宇音天下模组等。

硬件功能

序号 硬件功能 功能说明
1 乐鑫ESP8266 WiFi模组 ⽀持STA/AP⼯作模式
2 红外探测器 可以探测是否有阻挡
3 RGB LED 可编程全彩LED灯
4 可编程电机 可编程正反转及调速电机
5 温湿度传感器
6 三个可编程按键
7 一组咪头接口
8 扬声器接口
9 语音降噪模块接口
10 USB转Uart接口 可以更方便对GoKit供电,并打印日志
11 Uart TTL程序烧写接口 可用USB转TTL烧写模组SOC程序
12 双模式模组接口 可按需求切换为SOC模式(GoKit3(S)所使用的模式)或MCU模式
13 OLED接口 可复用SPI等其他接口
预留接口 具有电源输出、SWD、Uart TTL、外置Arduino等接口功能

功能扩展板(正面):
Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图2功能扩展板(反面):
Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图3

ESP8266 模组

ESP8266 :乐鑫的一款高性能无线WiFi模组,可直接控制扩展板片上资源。
官网:https://www.espressif.com/zh-hans/products/modules/esp8266
WiFi 模组(正面):
Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图4
WiFi 模组(反面):
Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图5

扩展板按钮

按键 触发 功能
Reset 短按 复位WiFi模组
Key1 短按 自定义
Key1 长按(3s) 复位WiFi模组
Key2 短按 进入Soft AP模式
Key2 长按(3s) 进入AirLink模式
Key3 自定义 自定义

GoKit3(S) 使用模式

GoKit3 的扩展板的模组接口采用双排母的设计,模组的单排针根据用法不同选择 MCU (MCU模式接口) 和 SoC (SoC 模式接口) 两种接入方式。

MCU 模式

MCU 模式的玩法与 GoKit2 一样,采用底板+扩展板+模组的方式(如下图所示),支持标准版(STM32底板)和创客版(arduino底板)两种底板,支持的模组包括所有已经对接机智云的各合作伙伴厂家的模组,如 ESP8266、QCA4004、RealTek8711AM、HF LBP100、庆科等模组。MCU 模式是分体式的设计方案。WiFi 模组只负责信息的接收与发送,它通过串口等方式与 MCU 进行通信,需要在 MCU 上进行协议解析与外设相关的开发。这种方案的优点是不受限于 WiFi SOC 片上资源、应用扩展度高;缺点是开发难度大、生产成本高。
image.png
使用 MCU 的连接方式需要开发者自更新 wifi 模组的固件,固件下载地址及烧录方法见下面链接:

  • 1、GAgent固件,下载页面,选择“GAgent for ESP8266”。
  • 2、GAgent固件烧录方法
  • 3、STM32 MCU源码包,下载页面,选择“微信宠物屋 for GoKit 2 STM”进行下载。

    SoC 模式

    SoC 模式是另外一种接入方式,由扩展板+模组组成。SoC版直接控制外设,节省了一颗 MCU 及周边电路,板子结构更简单,更经济。通过扩展板双排模组接口的方式支持,目前支持的模组有 ESP8266 模组、Hi3518E 等。SOC 模式是整体式的设计方案。它将 WiFi 模组与外设驱动模块直接连接起来,直接在 WiFi SOC 上进行开发,省去了一层通讯过程。这种方案的优点是能降低开发难度、降低生产成本;缺点是受限于 WiFi SOC 片上资源,应用有限。
    Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图7
    说明:SoC 模式的模组应该插到扩展板的 SoC 模式接口上;SoC 模式使用时应与底板分离,否则模组程序无法正常启动。
    二次开发源码包及原理图已经开放,地址是:

  • 1、ESP8266 SoC源码包下载页面 ,选择“微信宠物屋 for GoKit3(S) ESP8266”进行下载。

  • 2、原理图: http://club.gizwits.com/thread-2889-1-1.html

    新人疑问解答:在淘宝上购买的 Gokit3 (SoC 版) 并不仅仅只有 SoC 模式,并且出厂默认模式是 MCU 模式,开源通过扩展板的双模式组合接口切换,但是需要自己编译程序。

ESP8266 交叉编译环境搭建

根据官方文档和社区介绍,GoKit3 SoC 模式的编译需要在 linux 环境进行,而代码烧录又是在 Window 环境,开发环境搭建具有以下三种方式:

  1. 使用乐鑫官方的 ESP8266 开发环境
  2. 虚拟机 VMware(12.0版) + Ubuntu系统(14.04 <64位版>)
  3. 安信可提供的一体化 IDE:https://docs.ai-thinker.com/tools

这里提供 Windows 和 Mac 两个平台交叉编译环境搭建的方法,Windows 系统基于 WSL2 + Ubuntu 提供 Linux 环境编译环境,Mac 系统本身就是 Unix 环境,很容易就支持交叉编译环境。

Windows 平台交叉编译环境搭建

WSL2 + Ubuntu 安装

官方文档:适用于 Linux 的 Windows 子系统文档
1.安装适用于 Linux 的 Windows 子系统
必须先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发版。
以管理员身份打开 PowerShell 并运行:

  1. dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

2.启用“虚拟机平台”可选组件
安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。
以管理员身份打开 PowerShell 并运行:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重新启动计算机,以完成 WSL 安装并更新到 WSL2。
3.将 WSL 2 设置为默认版本
以管理员的身份打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:

wsl --set-default-version 2

4.安装所选的 Linux 分发版
打开 Microsoft Store,并选择你偏好的 Linux 分发版。
Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图8
选择 Ubuntu 进行安装。按照提示创建账号和密码,账号不一定需要和 windows 账号相同。

安装交叉编译工具链

Step 1: 安装 linux 环境相关的软件库

 sudo apt-get update
 sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python-is-python2

Step 2: 下载交叉编译工具 xtensa-lx106-elf
ESP8266 集成了 32 位 Tensilica 处理器,Xtensa 处理器体系结构是一个可配置、可扩展和可集成的 32 位 RISC 处理器核心。ESP8266 需要使用交叉编译工具 xtensa-lx106-elf,可以从 esp-open-sdk 项目编译得到,也可以直接下载编译好的包:

wget -O ~/xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz https://dl.espressif.com/dl/xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz
mkdir -p /opt/esp
cd /opt/esp
tar -xzf ~/xtensa-lx106-elf-linux64-1.22.0-100-ge567ec7-5.2.0.tar.gz

工具链将解压缩到 /opt/esp/xtensa-lx106-elf 目录。
Step 3: 安装 Xtensa 库和头文件
下载库补丁至 /opt/esp/xtensa-lx106-elf/xtensa-lx106-elf/lib, 先切换目录,注意是 xtensa-lx106-elf 下面的xtensa-lx106-elf 同名子目录:

wget -O lib/libc.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libc.a
wget -O lib/libhal.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a
wget -O include.tgz https://github.com/esp8266/esp8266-wiki/raw/master/include.tgz
tar -xvzf include.tgz

可以在 Windows 系统下载完成,拷贝到 WSL 里面:

cp -a /mnt/d/work/gokit3/开发工具/xtensa/lib/libc.a lib/libc.a
cp -a /mnt/d/work/gokit3/开发工具/xtensa/lib/libhal.a lib/libhal.a
cp -a /mnt/d/work/gokit3/开发工具/xtensa/include.tgz include.tgz
tar -xvzf include.tgz

Step 4: 配置 ~/.profile 文件

vim ~/.profile

在 .profile 最后一行添加:

export PATH="$PATH:/opt/esp/xtensa-lx106-elf/bin"
alias get_lx106='export PATH="$PATH:/opt/esp/xtensa-lx106-elf/bin"'

保存退出,执行:

source ~/.profile

执行 xtensa-lx106-elf-gcc -v 显示如下所以表示配置正确:
image.png

Mac OS 平台交叉编译环境搭建

1.安装编译环境的依赖:

sudo easy_install pip
sudo pip install pyserial

2.安装交叉编译工具 xtensa-lx106-elf:
下载 https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-macos.tar.gz 文件,然后将其解压缩到 ~/esp 目录中:

mkdir -p ~/esp
cd ~/esp
tar -xzf ~/Downloads/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-macos.tar.gz

工具链将解压缩到 ~/esp/xtensa-lx106-elf 目录。
配置 PATH 环境变量:

vim ~/.bash_profile

~/.bash_profile 文件添加:

export PATH=$PATH:$HOME/esp/xtensa-lx106-elf/bin

更新 ~/.bash_profile:

source ~/.bash_profile

检查交叉编译包:

xtensa-lx106-elf-gcc -v

当发现有如下的信息输出时,就代表着我们已经安装成功了。
屏幕快照 2020-12-01 上午12.52.43.png

GoKit3(S)源码编译

生成源代码

GoKit3(S)的源码获取方式请查看:代码自动生成工具介绍 文档中 生成SoC方案代码 一节。
其中关于硬件平台中的选择需要知道 Flash 的容量大小:
image.png
具体开源看 ESP8266 模组后面的型号,然后参考选型表对照:
image.png
参考:http://wiki.ai-thinker.com/esp8266

源代码编译

将 GoKit3(S) 源码解压后拷贝到 WSL 目录下:

cp -a /mnt/d/work/gokit3/program/SoC_ESP8266_32M_source /home/zhaomenghuan/gokit3/program/SoC_ESP8266_32M_source

进入编译目录:

cd ~/gokit3/program/SoC_ESP8266_32M_source/app

运行编译脚本:

./gen_misc.sh

如下图所示表明编译成功:
image.png

GoKit3(S)固件下载

下载烧写软件

  • Windows 平台 Flash 下载工具(ESP8266 & ESP32 & ESP32-S2)

https://www.espressif.com/zh-hans/support/download/other-tools
下载解压点击 flash_download_tool_v3.8.5.exe 即可。

  • Mac OS ESP8266 Flash 工具:https://apps.apple.com/cn/app/esp8266flash/id1344542675?mt=12

    设置烧写选项

    GoKit3(S) 烧写固件分为 SoC 版和 MCU 版,开发者应根据 GoKit3(S) 的模式烧写对应版本的固件。
    编译后的固件:
    SOC版的程序固件名称为:user1.4096.new.6.bin
    编译后固件默认保存位置:~/gokit3/program/SoC_ESP8266_32M_source/bin/upgrade
    确认烧写选项:
    image.png
    需要烧写 bin/blank.bin、bin/boot_v1.6.bin、bin/esp_init_data_default.bin、bin/upgrade/user1.4096.new.6.bin 四个固件。这几个固件的含义如下:
⽂件列表 是否必选 说明
blank.bin 必选 初始化系统参数,由 ESP8266 SDK 提供
boot_v1.6.bin 必选 Bootloader,由 ESP8266 SDK 提供
esp_init_data_default.bin 必选 初始化射频参数,由 ESP8266 SDK 提供
user1.4096.new.6.bin 初次使⽤必选 主程序,编译代码⽣成

烧写具体过程

1.连接 TTL 转 USB 接口

Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图15

2.给 Gokit 扩展板供电

Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图16

新人误区:扩展板不是提供了 USB 转串口的接口,为啥还需要单独用 USB 转 TTL 串口线进行连接?这是因为扩展板上的串口 CP2102 只是输出 DEBUG 信息用,不能用来下载固件。

3.上电烧录固件

首先,将拨码开关设为程序烧录模式(下拨位置)

Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图17
相继按下烧录工具的“START”键与WiFi模组的“Reset”键,开始烧录程序:
Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图18
Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图19
若显示“完成”及烧录成功
Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图20

4.切换正常工作模式

将拨码开关设为正常使用模式(上拨位置)
Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图21
按下
Reset键重启模组**,程序开始工作

Gokit3 SoC 模式 ESP8266 模组开发环境搭建 - 图22

VS Code 代码编写

WSL 中使用 VS Code

Windows 环境安装 VS Code,然后安装 Remote WSL 拓展。
image.png
安装好之后,打开一个 linux 远程窗口:
image.png
导入工程,可以直接在终端编译调试:
image.png
为了方便写代码,可以在 WSL 的 VS Code 安装 C/C++ 相关的插件。

运行微信宠物屋 Demo

参考官方文档 通讯模组SoC方案接入机智云流程,通过开发者中心自动生成代码,然后本地修改自动生成的代码,然后按照上面的步骤烧录代码即可实现官方的 Demo。烧录成功后,使用串口调试工具可以查看设置运行的日志,后面我们可以通过在源码中添加一些自定义的日志,这样就可以开始去看源代码了。
image.png

参考

写文章不容易,也许写这些代码就几分钟的事,写一篇大家好接受的文章或许需要几天的酝酿,如果文章对您有帮助请我喝杯咖啡吧!
2020-12-06 at 11.48 AM.png