VS Code + WSL 搭建 RaspberryPi Pico 开发环境
前面老周写一堆 .NET 与树莓派相关的水文。其实使用的是.net的 IOT 库,并不只是树莓派,其他运行 Linux 的开发板都适用,只要有 GPIO 就行。老周好像在哪看到过,有 USB 转GPIO的模块,直接插在电脑上也能使用 IOT 库。
不管是树莓派,还是 Arduino 系列的,或是 ESP 系列的,你会发现,Iot 框架实际都是这几个东东组成(基本都是这套路):
1、GPIO:数字引脚,读写高 / 低电平,即处理数字信号;
2、串口通信;
3、ADC:即读取模拟量(模数转换),Arduino系列、ESP系列、STM32系列都有ADC功能,但作为微型电脑版的树莓派是没有的,前面老周写过,需要使用其他ADC模块;
4、I2C(IIC)协议;
5、SPI 协议;
6、DAC:数字转模拟,这个好像很多板子没有,据老周的有限知识量,ESP32模组有集成 8 位的DAC功能。一般使用输出模拟电压是没问题,但要作为音频信号输出就水了点。所以一般需要外接支持 I2S(IIS)的音频解码板。
-------------------------------------------------------------------------------------------------------------------------------------------
按照老周的折腾习惯,折腾完大草莓,就应该折腾小草莓了。小草莓就是——Raspberry pi Pico。也许树莓派基金会也觉得作为微型电脑的大草莓,搞物联网有些大材小用了。尽管资源挺多,但还真不能英特尔系列的开发板比,毕竟处理器功耗是很关键的,你想节能自然要牺牲执行速度了。
Raspberry Pi Pico 用的是自主研发的 RP2040 处理器,架构是ARM,作为专用 GPIO 控制板,性能肯定能甩 Arduino Uno 五千条高速公路,而且价格比 Uno 低很多。某宝一般售价是 28 - 38 之间。当然,会有个别不会做生意的,一上来就卖 150 元的,这些卖家显然不知道网购是可以货比万家的,他们估计是为了不忘初心,坚守零销量第一阵线。
这里就不得不提 ESP32 开发板,引脚虽然比 RP Pico 少一些,但有 Wifi,有蓝牙,有ADC,有DAC,有霍尔传感器等,价格一般 20 多,是比 rp pico 便宜些。不过,你买的ESP32开发板只有模组是乐鑫的,板子是一些小电子厂做的(也不排除有大厂),乐鑫官方的开发板也挺贵的。
虽然没有 WiFi 没有蓝牙,不过 RP Pico 的性价比还是不错的,而且功耗确实很低。老周曾说过用它做了门铃,在家里已经运行了大半年了,除了中途天线模块烧了(这质量?)换了一个新模块(12元左右),就是一直运行着。由于消耗电流太小了,充电宝供电会自动断电,只能用 5V1A 的充电头供电。日常工作电流都在微安级别,特省电。
小草莓目前是不能用 .NET 开发的(估计以后也不太可能会支持),按官方文档,目前支持C/C++,Micropython。当然也有 Arduino 插件,但功能不完整。刚发布的时候耍了一下,只有一路 UART 可以用,另一路没反应,不知道现在修复了没有。至于 Micropython,我只能用两个字来评价——【无语】。因此,最优方案还是 C 语言(C++也行,但SDK基本是C写的)。
这个SDK,由于官方的定位是希望你买了小草莓,顺便买大草莓,即优先推荐你在 Raspberry Pi3 或者 Raspberry Pi 4 系列上进行开发。但是,老周作为全国人民公认的老实人,不得不说一句实话,你这板子上写代码,能干得我的台式机吗?所以嘛,还是在PC上写代码刺激。其实,SDK是可以在PC上用的,Windows、macOS、Linux上都行,官方和网上都有教程。
可能是老周最近运气不太好,按照文档步骤,在 Windows 上没有弄成功过,试过几次都失败,CMake 报的错误应该是找不到C编译器。反正这个目前没法解决,环境变量也没置正确,路径中也没有空格,也没有中文,也没有长文件名,但还是找不到编译器。毕竟官方是想让你在 Raspberry Pi 上开发的,大概是对Linux比较友好。
等等,这个其实也好办,不是说 Win 10 是最大的 Linux 发行版吗?嗯,这样就OK了,既可以用 Windows,又可以友好。
唉,回头看一看内容,哇,原来上面写了那么多废话,现在才进入主题,这要是放在高考作文,肯定是满分作文无疑,很自豪ing。
======================================================================================
相信各位同学如果玩过大草莓,会知道 Raspbian 其实是 Debian 发行版的变种,所以,老周在 WSL 中优先考虑 Debian。这里老周顺便演示一下如何把 Linux 子系统转移到其他分区,方法很简单,不用改配置,不用改权限。虽然老周把一整块 512 G的SSD都作为系统分区,但软件装多了好像也不怎么够用,故,还是把子系统弄到其他分区上好一些,谁知道它将来会占用多大空间呢,Linux 在安装工具和更新时,经常会依赖安装一大堆东西。
好了,不扯F话了,开工。
1、到Windows商店找到 Debian 君,安装。这个应该会了吧,不会的话可以问班主任。
2、坐和等待。
3、安装完启动它,初始化完后会提示你输入用户名,如demo。
4、回车后,要求你输入密码,比如 123456。反正是子系统,设置个䜭智密码也没关系。
5、关闭它,对,关掉,现在啥也不用干。
6、打开CMD,或者PowerShell,输入以下命令,看看刚刚安装的发行版。
wsl --list --all
看到 Debian 就没错了。
**注:WSL有 1 和 2 两个版本,这个随便选,如果你要跨 Linux 和 Windows 操作文件,就用版本 1,因为版本 2 是用虚拟机的,读写较慢。
7、记下发行名称 Debian,然后使用 export 命令,把它导出备份,假如我存放在E盘,文件类型是 .tar。
wsl --export Debian E:\mydebian.tar
export 表示导出,这命令本来是用来备份的,不过这里可以发挥一下,用作迁移。E:\mydebian.tar就是导出后的文件。因为是初始系统,只有200多M。
8、执行以下WSL命令,注销掉 Debian 子系统。
wsl --unregister Debian
这时候你再执行一次 wsl --list 就啥都没有了。
9、在 D 盘里(你可以选其他盘)建一个目录,名字你喜欢,比如我建了两层目录:Linux/Debian,主要是考虑到可能将来要迁移其他发行版。
10、执行以下命令重新导入 Debian。
wsl --import Debian D:\Linux\Debian E:\mydebian.tar --version 1
Debian 是发行版名称,D:\Linux\Debian 是刚刚建的目录,用来放子系统;后面的.tar 文件就是刚才导出的备份;--version 指定使用 WSL 1。
再执行一次 wsl --list 就能看到子系统又回来了。
11、【可选】把刚从商店安装的 Debian 卸载。不卸也行,反正也不占地方,如果卸了,也不怕,你只需要在任意路径下执行 bash 就能进入子系统了。老周建议不要卸,因为它是一个启动器,而且还可以执行 config 命令进行一些配置(这不,下一步就用上了)。
12、这样导入之后,子系统默认启动到 root 上下文的。咱们一般是没有必要的,所以,我们执行一下 config,重新设置一下默认用户。
debian config --default-user demo
Windows 对大小写不敏感,所以 debian 也能找到 Debian 启动器(你看,幸好刚刚没有把 Debian 卸载,不然执行不了)。“demo” 就是老周前面初始化时设置的用户名。
万一,我说的是万一,你一时手残,把Debian卸了,咋办?如果你有耐心,可以来一句 wsl --unregister Debian,然后从头来过,就是从第一步开始。当然了,补救方法是有的。可以利用一下 wsl.conf 文件。
进入子系统,cd 到 /etc 目录下,默认应该不存在 wsl.conf 文件的,所以咱们手动建一个。
sudo nano /etc/wsl.conf
然后输入以下配置:
[user]
default=demo
【Ctrl+O】保存,【Ctrl+X】退出。
这是典型的 .ini 文件格式,用中括号包起来的是配置节的名称,这里咱们配置了 user 节,接着另起一行,写配置项,格式 key=val。如果有多条配置项,那就一行一条。
13、子系统改成国内源,此处省略 5000 个字,相信你也会了,老周就不F话了。如果网速可以,就不用改国内源了。
安装工具链
在克隆SDK前,必须先安装工具链。按照官方教程,就下面这一句完成。
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib python3
用 bash 命令打开 Debian 子系统,默认是 root 上下文,所以,如果你启动子系统后是root上下文,就不用加 sudo 了。这个得占约 2 G的空间,慢慢等吧。今天运气好,下载速度 5MB/S ,节约了一些时间。
注意不要漏掉 python3,不然后面会出错。
下载SDK
下载SDK是克隆 github 上面的源代码。所以先安装git。
sudo apt update && sudo apt install git
还要装个 wget。
sudo apt install wget
然而事情不是当初想的那么简单,github 上面的代码能否拉下来,真的需要充值运气。十有八九会失败,就算不是全失败都会有一部分文件下载不了。所以,还要加上 cgit(前面装 wget 就是为了这时候用)。
sudo wget http://cgit.killf.info/cgit_linux_latest -O /usr/local/bin/cgit && sudo chmod 755 /usr/local/bin/cgit
好,现在,尝试克隆一下SDK。先切换到 Home 目录。
cd ~
用刚安装的 cgit 来克隆。
cgit clone https://github.com/raspberrypi/pico-sdk
速度不错,克隆完后,会在你的用户目录下产生个 pico-sdk 目录。如果你是用 root 上下文运行的,那么目录是在 /root 下面,至于如何处理,你自己看着办,可以移到非 root 的用户目录下。
其实到这里就能用了,源代码不多,6到7M的大小。不过它依赖一个 tinyUSB 的库,用来进行USB通信的,这个并不是必须的,如果你不使用 USB 串口,可以不需要这个模块。如果要的话,就加上这两句:
cd pico-sdk
cgit submodule update --init
最后,打开 /etc 下面的 profile,配置一下环境变量,变量名为 PICO_SDK_PATH,指向刚才的 pico-sdk 目录。
sudo nano /etc/profile
export PICO_SDK_PATH=/home/demo/pico-sdk
这一行是加到文件的最后一行。保存退出。
让配置马上生效,执行一下 source 命令。
source /etc/profile
这个环境变量是系统级别的,其他用户也能用,如果只想给当前用户配置,就用 $HOME/.profile 文件(profile 前面有个小数点,在Linux中表示隐藏文件)。
创建项目写代码
打开 VS Code,保证这三个插件已安装:
1、C/C++扩展,微软官方的;
2、CMake Tool,也是微软官方的;
3、Remote-WSL,用来访问子系统的;
4、CMake,这个可选,可以不装,非官方。
在VS Code 中打开子系统中的目录,有个很简单的方法。
假如,我在 home 目录下建个目录,叫 my,用来放项目。
mkdir my
然后进入 my。
cd my
接着输入:
code .
第一次用会安装一些包包,然后就自动启动VSCocde,前提是你得把 VS Code 的路径添加到 PATH 变量中,这个是在Windows中的Code,PATH也是在Windows中配置的,不是Linux子系统。
这时候,C++插件和CMake Tools插件还要在WSL中再安装一次,成功之后会让选编译器。
选择 arm-none-eabi。
在项目目录下建个新文件,名为 CMakeLists.txt,这个名字请区分大小写,而且不要乱改名字,CMake 专属名称。然后在这个文本文件中输入:
cmake_minimum_required(VERSION 3.13)
include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)
project(myapp) pico_sdk_init() add_executable(sb "app.c")
pico_add_extra_outputs(sb)
target_link_libraries(sb pico_stdlib)
这是最简单的项目配置,下面老周解析一下。
第一行,从字面意思猜猜,对了,设定支持的最低 CMake 版本号,可以随便写,不要比当前安装的高就行,比如安装了 3.18,不要设置成 13.25,但可以设置为 3.15。
第二行,include 引入 RPI Pico SDK专用的 cmake 文件,官方教程里是让你先把这个文件复制到项目中,然后再用相对路径引用。这里我懒得复制,直接指向文件原路径,其中 PICO_SDK_PATH 是配置的环境变量指向 /home/demo/pico-sdk 目录。
第三行,project,指定本项目的名称,给它取个你喜欢的名字就行,我这里是“myapp”,双引号可用可不用。
第四行,调用一个宏,叫 pico_sdk_init,这个就是从官方SDK的cmake文件中导入的。
第五行,add_executable 添加咱们项目中的源代码文件,比如 app.c,第一个参数是指定一个 target 的名称,也是可以随便取,不要和cmake保留名称冲突就行(冲突了它会提示的,所以不用怕),这个target在整个项目中必须唯一。这里我取了个很低俗的名字,叫"sb"。
第六行,pico_add_extra_outputs,指定程序编译后导出的二进制文件格式,这里会生成N种格式,如 .bin,.elf,.dis,.hex,.uf2。其中,我们刷到 RPI Pico 上,用 uf2 文件很方便,像U盘一样,直接放进去就行了。uf2 格式可以像U盘/移动硬盘拖文件的方式来为设置更新固件,非常的傻瓜化操作,也是微软的大法之一。
pico_add_extra_outputs 是个函数,在 pico-sdk\src\rp2_common.cmake 文件中,它调用了另外四个函数:
pico_add_hex_output(${TARGET}):生成 hex 格式文件;
pico_add_bin_output(${TARGET}):生成 bin 格式文件;
pico_add_dis_output(${TARGET}):生成 dis 格式文件;
pico_add_uf2_output(${TARGET}):生成 uf2 格式文件。
第七行,target_link_libraries(sb pico_stdlib),sb也是咱们项目中唯一的 target 名称,一定要和上面的命令一致,不然就无法把标准库链接到当前项目中。pico_stdlib,是 pico 的标准库,官方文档把这些名称称为“接口”,它链接了一些常用的库,比如 GPIO,UART 都在里面。
target_link_libraries(pico_stdlib INTERFACE
pico_stdlib_headers
pico_platform
pico_runtime
pico_stdio
pico_time
) target_link_libraries(pico_stdlib_headers INTERFACE
hardware_gpio
hardware_uart
hardware_divider
pico_time
pico_util
)
所以,你如果要简单操作 GPIO,那么不需要链接其他库,pico_stdlib 已包含,头文件包含的写法是 #include “pico/stdlib”,把下划线换成“/”,整个SDK的库都是这种规律,比如 hardware_uart,头文件为 "hardware/uart.h"。
新建一个 app.c 文件,我们写代码。
#include <stdio.h>
#include "pico/stdlib.h" int main()
{
return 0;
}
纯用来演示,所以就写得这么简陋。
在 CMake 的配置阶段,极大的概率会发生这样的错误:
因为 CMake 会先 CTest 一下,看看你配置的工具能不能用。这个错误很让人头痛,虽然网上能找到不少方法,但是那些方法是直接传参数给 arm-none-eabi-gcc 编译器的,而我们这里是用 CMake 来完成整套工作的。
arm-none-eabi-gcc -o XXX XXX.c -g --specs=nosys.specs
故,咱们要在VS Code 里面配置一下 CMake 工个。VS Code 窗口左下角有个【管理】按钮(一个齿轮图标),然后选【设置】,找到 扩展 -- CMake Tools Configuration ,再找到 Configure Settings。
点击“在 settings.json 中编辑”,然后在 JSON 文档中输入:
"cmake.configureSettings": {
"CMAKE_EXE_LINKER_FLAGS": "--specs=nano.specs"
}
CMAKE_EXE_LINKER_FLAGS 是针对链接器的选项,它的值就是上面的 --specs=nano.specs 参数。
修改后保存关闭文件,再 config 一次 CMake 就没问题了,build 也能顺利通过。
好了,今天的文章就水到这儿了,有空老周将继续水。
VS Code + WSL 搭建 RaspberryPi Pico 开发环境的更多相关文章
- Visual Studio Code搭建NodeJs的开发环境
一.Visual Studio Code搭建NodeJs的开发环境 1.下载安装NodeJs并配置环境变量 可以参考:NodeJs的安装和环境变量配置 2.下载安装 VS Code编辑器 可以参考:V ...
- windows和linux中搭建python集成开发环境IDE——如何设置多个python环境
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- 从零开始搭建Go语言开发环境
一步一步,从零搭建Go语言开发环境. 安装Go语言及搭建Go语言开发环境 下载 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://gol ...
- Windows下搭建Android NDK开发环境及命令行编译
首先说明本文内的相关安装操作参考<Pro Android C++ with the NDK>一书. 安装 Windows搭建Android NDK开发环境需要安装如下部分(同时需要配置对应 ...
- ES6 学习笔记 (2)-- Liunx环境安装Node.js 与 搭建 Node.js 开发环境
笔记参考来源:廖雪峰老师的javascript全栈教程 一.安装Node.js 目前Node.js的最新版本是6.2.x.首先,从Node.js官网下载对应平台的安装程序. 1.下载 选择对应的Liu ...
- 安装Go语言及搭建Go语言开发环境
一步一步,从零搭建Go语言开发环境. 安装Go语言及搭建Go语言开发环境 下载 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://gol ...
- Win7下搭建Go语言开发环境
Win7下搭建Go语言开发环境 1 下载适合window版本的Go安装包,下载地址http://code.google.com/p/go/downloads/list 2 下载适合window本本的L ...
- Qemu搭建ARM vexpress开发环境(一)
Qemu搭建ARM vexpress开发环境(一) 标签(空格分隔): Qemu ARM Linux 嵌入式开发离不开硬件设备比如:开发板.外设等,但是如果只是想学习研究Linux内核,想学习Linu ...
- 干货分享:在Windows下使用Visual Studio搭建C语言开发环境
前言:本文将教大家如何使用 VIsual Studio Code 搭建 C 语言开发环境,包括使用 VS Code 如何编译和调试 C 语言程序,需要 用到的工具有 Visual Studio Cod ...
随机推荐
- 关于数字化工厂&智能工厂建设 IT 经验总结
最近疫情闹得胆战心惊,前不久客户给我开了一个玩笑,当天我们同桌会议了一天,晚上客户回家之后就被隔离了,当他给我发这个消息的时候背都凉了一截,害怕之余在机场呆了一个晚上,捅乐鼻孔插了嗓子之后确认无事,后 ...
- 【笔记】Ada Boosting和Gradient Boosting
Ada Boosting和Gradient Boosting Ada Boosting 除了先前的集成学习的思路以外,还有一种集成学习的思路boosting,这种思路,也是集成多个模型,但是和bagg ...
- SpringBoot开发十五-发布帖子
需求介绍 使用 AJAX 异步通信实现网页能够增量的更新呈现到页面上而不需要刷新整个页面. 现在基本上都是服务器返回 JSON 字符串来解析 代码实现 使用 JQuery 发送 AJAX 请求. 首先 ...
- moco模拟接口具体操作
1.get请求 [ { "description": "模拟一个没有参数的get请求", "request": { "uri&qu ...
- Jackson格式化时间和科学计数法问题
1. 首先如果有自定义 WebMvcConfigurer 或者 WebMvcConfigurationSupport 的,一定不要在上面加 @EnableWebMvc 注解,因为这个注解会覆盖掉s ...
- 渲染优化之CSS Containment
引言 在开始介绍今天的主角 CSS Containment 之前,我们需要了解一些前置知识回流和重绘,方便我们理解以及应用的场景. 简单回忆下回流和重绘 回流(Reflow):当浏览器必须重新处理和绘 ...
- Java - Enum 枚举类型
目录 前言 应用 定义 基本Enum特性 Enum的静态导入 Enum中添加新方法 Switch语句中的Enum Enum的继承 EnumSet的使用 EnumMap的使用 常量相关方法 枚举值向枚举 ...
- 题解 P4449 于神之怒加强版
这道题算是我完完整整推的第一道题,写篇题解纪念一下. 题目 废话不多说,直接开始推式子(给新手准备,过程较详细,大佬可自行跳步),以下过程中均假设 \((n\le m)\),\([d=1]\) 类似于 ...
- 上传jar包到nexus
注释掉: org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.meeno.boot.oa.OaAutoConfigur ...
- AspNetCore WebApi
需求 前几天,马老板给小明和小红一个"待办事项"网站,小明负责后端,小红负责前端,并要求网站可以同时在 Windows.和 Linux 上运行. 小明整理了一下"待办事项 ...