ameba mp bin档的制作

  1. 基线代码
    基线代码可以从官网下载或者从fae渠道获取。
    选择对应的工程基线,注意区分ameba1和amebaz系列。
    ameba1系列经实际操作,ameba1 v3.4b3 和ameba v4.0c都是可以的。
  2. 替换mp工程需要的lib库
    注意这个也是需要根据处理器的不同,找到对应的正确版本lib_wlan_mp.a。
    在默认的工程中,右键/lib/lib_wlan.a,选择option,选择 exclude from build,然后加入正确的lib_wlan_mp.a,最后重新编译就可以了。
    lib_wlan_mp.a的替换
  3. troubleshoot
    过程中遇到编译的bin开机hardfault error,和mptool无法连接的问题,经反复折腾都是基线版本的问题,无明显提示和解决方法

ameba1的mptool使用

realtek的rt8710af和rt8711af都归属于ameba1系列。

支持mptool的firmware

首先硬件的firmware必须是支持mptool的版本,支持的的版本运行时会显示如下类似的日志:

Initializing WIFI ...
RTL8195A[Driver]: The driver is for MP

日志中有mp字样的log。

连接硬件

连接时,要ameba芯片的GPIOB3脚接地,然后开机,再连接mptool,连接成功后,如下图所示:
mian
efuse
使用mptool前,注意参看工具目录下的使用手册,先进行正确的配置哦。

对应的软件和工具

支持mptool的firmware和mptool工具:
支持mptool的bin
mptool

jtag和swd接口线序

下面为J-Link接口定义:

仿真器端口 连接目标板 备注
1. VCC MCU电源VCC VCC
2. VCC MCU电源VCC VCC
3. TRST TRST Test ReSeT/ pin
4. GND GND或悬空
5. TDI TDI Test Data In pin
6. GND GND或悬空
7. TMS, SWIO TMS, SWIO JTAG:Test Mode State pin ; SWD: Data I/O pin
8. GND GND或悬空
9. TCLK, SWCLK TCLK, SWCLK JTAG: Test Clock pin ; SWD: Clock pin
10. GND GND或悬空
11. RTCK RTCK
12. GND GND或悬空
13. TDO TDO Test Data Out pin|
14. GND GND或悬空
15. RESET RESET RSTIN pin|
16. GND GND或悬空
17. NC NC
18. GND GND或悬空
19. NC NC
20. GND GND或悬空

下面是管脚物理排列:
jtagswd

基于docker/虚拟机的esp32远程工作流

工作流框图

背景说明

  1. 为什么需要这套工作流--为了满足高效和灵活的开发方式
    • 因为我经常需要在公司和家里切换不同的电脑工作,所以编译环境需要在远程主机上,这样不同的工作机器都能访问相同的工作编译环境。
    • 因为esp32官方推荐的还是在linux下编译,所以最简单的就是我们的编译环境和工具链还是在linux下。但是我们日常的编码和硬件烧录还是在本地windows和mac的居多。所以就有了这一套本地环境和远程docker环境相互配合的工作流。我们可以在远程编译环境使用命令行高效编译,本地继续使用VSC等工具编码和烧录。
  2. 为什么用docker而不是虚拟机?
    • 因为docker更轻量小巧,结合hub.docker.com 用起来也更方便些,更具有灵活性。当然如果你就是喜欢用VM,也是可以的,这个流程仍然适用,只是挂载宿主的目录方式有所不同而已。
    • 使用docker另外一个好处是,你可以很方便的将你配置的开发环境通过hub.docker.com分享给需要的人。

工作流步骤

  • 选择对应的linux系统镜像创建我们的docker镜像,这里我们推荐选择ubuntu 16.04系统。
  • 启动时,我们用 -v 参数将远程宿主机的本地目录挂载进docker系统。
  • 按照官方esp32的编译环境要求,部署相应的工具链和环境。部署到我们映射的目录中,这样相关的工具和代码等都可以在宿主机里面可见,并且可访问。
  • 将挂载的目录通过samba或者sshfs共享给远程的编码机器(window或者MAC)环境,并且挂载到本地虚拟磁盘路径上。
  • 日常的编码和烧录,我们就可以像访问本都路径一样访问远程vps的开发路径。使用VSC编码,或者download tool进行开发板烧录。

docker镜像

最后,如果你对使用docker环境开发esp32感兴趣,也可以直接使用我目前在用的针对esp32的docker开发镜像。一键部署,开箱即用。

docker pull hiproz/ubuntu-esp32

参考

esp32 ubuntu开发环境搭建
docker常用操作命令
windows下实现esp32下载
sshfs的安装

windows下实现esp32下载

  1. UI工具下载
    使用官方的UI工具 flash_download_tools 但是始终提示如下的错误:
wxBitmap::CreateFromImage(): invalid image

同时UI工具弹框提示:找不到 ./RESOURCE/IDLE_S.bmb
根据日志,对相关模组做了重新安装:

pip install -U wxPython
pip install Pillow

安装后还是不行,遂暂时另寻他法。
2. python命令行下载
想起ubuntu下 make flash 命令后的下载命令,一想,我可以在windows下如法炮制啊:

 ./esp32/esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port COM15 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 ./esp32/esp-proj/hello_world/build/bootloader/bootloader.bin 0x10000 ./esp32/esp-proj/hello_world/build/hello-world.bin 0x8000 ./esp32/esp-proj/hello_world/build/partitions_singleapp.bin

遇到问题:

No module named tools.list_ports

于是安装缺少的模块:

pip install pyserial --upgrade

再执行,同步重启设备,竟然顺利烧写成功了。
3. UI工具正常了
等方式2成功后,再尝试UI工具时,竟然顺利成功了。感情前面的失败是uart组件缺失导致的,日志提示真是坑啊。

最后还是一如既往的死磕,搞定!

sshfs的安装

windows环境

sshfs客户端和dokan版本要正确,否则可能报version error。下面是验证过的2个配套版本:
1. dokan
https://github.com/dokan-dev/dokany/releases/tag/v1.0.5
2. winsshfs
https://github.com/feo-cz/win-sshfs/releases

mac环境

mac使用的底层技术和window不一样:
1. 安装

brew install Caskroom/cask/osxfuse
brew install sshfs

安装完执行sshfs命令测试一下。
2. 运行

sshfs -C -o reconnect user@hostname:remote_dir local_dir

考虑到之前已经运行过,或者挂载过,每次运行时,都清除掉,重新运行,如果是设置了只允许证书登录,则使用-o ssh_command参数指定ssh的证书,参考命令如下:

pkill -9 sshfs
umount local_dir
sshfs -o ssh_command='ssh -i key' user@hostname:remote_dir  local_dir

windows下的端口映射

在某些情况下,我们要绕过一些失效的端口,就需要将一些默认的端口做端口映射。

端口映射,linux/unix中使用ssh命令,而windows中也有类似的命令netsh。客户端连接物理主机的“服务端口a”映射到“服务端口b”从而实现端口的变换。

命令如下

  • 可以查看存在的转发
    netsh interface portproxy show all

  • 添加一个IPV4到IPV4的端口映射
    netsh interface portproxy add v4tov4 listenport=22 connectaddress=ip connectport=port

  • 删除指定转发端口
    netsh interface portproxy delete v4tov4 listenport=port

例子

假定需要通过192.168.1.8的14941端口连接192.168.1.118的22端口,则需要在192.168.1.8主机的命令行输入如下语句
- 操作系统开启了主机防火墙,需要放行TCP 14941的入站连接
netsh interface portproxy add v4tov4 listenport=14941 connectaddress=192.168.1.118 connectport=22
- 取消上面配置的端口转发,可以用如下语句:
netsh interface portproxy delete v4tov4 listenport=14941
- 如果想查看已经配置了哪些端口转发,可以用如下语句:
netsh interface portproxy show v4tov4

更多命令,请查看帮助,都写得很清楚的。

wordpress用户页面按照修改时间显示文章

默认是按照发布时间来显示的,有时候我们希望按照修改时间来显示,最近修改的先显示。
修改方法如下:
在你的主题首页文件 index.php中类似以下代码之前:

while (have_posts()) : the_post();

添加:

$posts = query_posts($query_string . '&orderby=modified');

这样在首页的排序就已经达到效果啦,如果你其它页面也需要这样安装修改排序,那么同理即可,修改其它页面就行了。