【rust/esp32】wsl2开发环境搭建与测试

news2024/11/18 13:55:12

文章目录

  • 说在前面
  • 流程
  • 可能的问题
    • wsl2相关
    • rust相关
    • vscode相关
    • build相关
  • 测试
  • 吐槽
  • 参考

说在前面

  • esp型号:esp32s3
  • 开发环境:wsl2
  • rustc版本:rustc 1.73.0-nightly
  • esp idf版本:v5.1.1

流程

  • 目前是按照这个demo的流程可以跑通
  • 修改demo中的部分代码,不然可能跑不通
    ~/rust-esp32-std-demo$ git diff src/main.rs
    diff --git a/src/main.rs b/src/main.rs
    index da6e581..f6f9aeb 100644
    --- a/src/main.rs
    +++ b/src/main.rs
    -const SSID: &str = env!("RUST_ESP32_STD_DEMO_WIFI_SSID");
    +const SSID: &str = "修改为wifi名";
    -const PASS: &str = env!("RUST_ESP32_STD_DEMO_WIFI_PASS");
    +const PASS: &str = "修改为wifi密码";
     
     #[cfg(esp32s2)]
     include!(env!("EMBUILD_GENERATED_SYMBOLS_FILE"));
    @@ -510,7 +510,7 @@ fn test_fs() -> Result<()> {
     fn test_tcp() -> Result<()> {
         info!("About to open a TCP connection to 1.1.1.1 port 80");
     
    -    let mut stream = TcpStream::connect("one.one.one.one:80")?;
    +    let mut stream = TcpStream::connect("223.5.5.5:80")?; // 国内dns
     
         let err = stream.try_clone();
         if let Err(err) = err {
    @@ -827,12 +827,12 @@ fn test_https_client() -> anyhow::Result<()> {
     
             
     
    -        let addr = "google.com:443".to_socket_addrs()?.next().unwrap();
    +        let addr = "baidu.com:443".to_socket_addrs()?.next().unwrap(); //你懂的
             let socket = Async::<TcpStream>::connect(addr).await?;
     
             let mut tls = esp_idf_svc::tls::AsyncEspTls::adopt(EspTlsSocket::new(socket))?;
     
    -        tls.negotiate("google.com", &esp_idf_svc::tls::Config::new())
    +        tls.negotiate("baidu.com", &esp_idf_svc::tls::Config::new()) //你懂的
                 .await?;
     
             tls.write_all(b"GET / HTTP/1.0\r\n\r\n").await?;
    

可能的问题

  • 以下这些问题奇奇怪怪,主要可能还是rust toolchain没有安装对
  • 还有就是按照rust build中espup的流程执行之后,我还是继续执行了./install-rust-toolchain.sh,不知道哪里有问题

wsl2相关

  • 如何访问usb设备
    Connect USB devices

rust相关

  • lib

    cargo install cargo-generate
    cargo install ldproxy
    cargo install espup
    cargo install espflash
    cargo install cargo-espflash # Optional
    
  • 问题:cargo-generate缺少pkg-config

    run pkg_config fail: Could not run `PKG_CONFIG_ALLOW_SYSTEM_CFLAGS="1" "pkg-config" "--libs" "--cflags" "openssl"`
    The pkg-config command could not be found.
    
    Most likely, you need to install a pkg-config package for your OS.
    Try `apt install pkg-config`, or `yum install pkg-config`,
    or `pkg install pkg-config`, or `apk add pkgconfig` depending on your distribution.
    

    解决:

    apt install pkg-config
    
  • 问题:espflash缺少libudev

    thread 'main' panicked at 'called `Result::unwrap()` on an `Err`
    value: "`PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=\"1\" 
    PKG_CONFIG_ALLOW_SYSTEM_LIBS=\"1\" \"pkg-config\" \"--libs\" \"--
    cflags\" \"libudev\"` did not exit successfully: exit status:
    1\nerror: could not find system library 'libudev' required by 
    the 'libudev-sys' crate\n\n--- stderr\nPackage libudev was 
    not found in the pkg-config search path.\n
    Perhaps you should add the directory containing `libudev.pc'\nto 
    the PKG_CONFIG_PATH environment variable\nNo package 
    'libudev' found\n"',
    

    解决:

    apt install libudev-dev
    
  • espup
    这里

  • 缺少xtensa-esp32-espidf

    error: Error loading target specification: Could not find specification for 
    target "xtensa-esp32-espidf". Run `rustc --print target-list` for a 
    list of built-in targets
    

    解决:

    rustup default esp
    

vscode相关

  • 插件(可选)
    这里
  • 在初始化的时候由于需要访问到github,这里可以设置下proxy:
    在这里插入图片描述
  • 缺少venv
    sudo apt install python3.10-venv
    

build相关

  • 缺少libclang
    thread 'main' panicked at 'Unable to find libclang: "couldn't find any valid shared libraries matching: ['libclang.so', 'libclang-.so', 'libclang.so.', 'libclang-.so.'], set the LIBCLANG_PATH environment variable to a path where one of these files can be found (invalid: [])"'
    
    解决:主要还是rust build没有搞好,如果已经搞好了,则需要设置一下环境变量
    ~/rust-build$ . export-esp.sh
    
  • 未识别到xtensa
    error: unknown target triple 'xtensa', please use -triple or -arch
    
    解决
    rustup update
    git clone git@github.com:esp-rs/rust-build.git
    chmod +x install-rust-toolchain.sh
    ./install-rust-toolchain.sh -i reinstall # this can probably fail the first time, so then
    softwareupdate --all --install --force
    ./install-rust-toolchain.sh -i reinstall
    
  • 选择target
    $ rustc --print target-list
    xtensa-esp32-espidf
    xtensa-esp32-none-elf
    xtensa-esp32s2-espidf
    xtensa-esp32s2-none-elf
    xtensa-esp32s3-espidf
    xtensa-esp32s3-none-elf
    xtensa-esp8266-none-elf
    
    这里我使用的是xtensa-esp32s3-espidf

测试

  • flash
    ~/rust-esp32-std-demo$ espflash flash target/xtensa-esp32s3-espidf/debug/rust-esp32-std-demo
    [2023-10-26T16:39:10Z INFO ] Serial port: '/dev/ttyACM0'
    [2023-10-26T16:39:10Z INFO ] Connecting...
    [2023-10-26T16:39:11Z INFO ] Using flash stub
    Chip type:         esp32s3 (revision v0.1)
    Crystal frequency: 40MHz
    Flash size:        16MB
    Features:          WiFi, BLE
    MAC address:       
    App/part. size:    1,763,504/16,384,000 bytes, 10.76%
    [00:00:01] [========================================]      14/14      0x0                                                                                                                                                                                                                                                     
    [00:00:00] [========================================]       1/1       0x8000                                                                                                                                                                                                                                                  
    [00:01:41] [========================================]    1016/1016    0x10000                                                                                                                                                                                                                                                 [2023-10-26T16:40:55Z INFO ] Flashing has completed!
    
  • monitor
    ~/rust-esp32-std-demo$ espflash monitor
    [2023-10-26T16:41:43Z INFO ] Serial port: '/dev/ttyACM0'
    [2023-10-26T16:41:43Z INFO ] Connecting...
    [2023-10-26T16:41:44Z INFO ] Using flash stub
    Commands:
        CTRL+R    Reset chip
        CTRL+C    Exit
    
    I (31) boot: ESP-IDF v5.1-beta1-378-gea5e0ff298-dirt 2nd stage bootloader
    I (32) boot: compile time Jun  7 2023 08:07:32
    I (33) boot: Multicore bootloader
    I (37) boot: chip revision: v0.1
    I (41) boot.esp32s3: Boot SPI Speed : 40MHz
    I (46) boot.esp32s3: SPI Mode       : DIO
    I (50) boot.esp32s3: SPI Flash Size : 16MB
    I (55) boot: Enabling RNG early entropy source...
    ...
    I (18144) rust_esp32_std_demo: Wifi DHCP info: IpInfo { ip: 192.168.1.11, subnet: Subnet { gateway: 192.168.1.1, mask: Mask(24) }, dns: Some(192.168.1.1), secondary_dns: Some(0.0.0.0) }
    ...
    
  • 访问monitor信息中的ip地址
    在这里插入图片描述

吐槽

  • 也许我打开方式不对,太恶心了,在试错的时候每次build都重新下一遍esp idf

参考

  • rust build
  • rust-esp32-std-demo
  • The Rust on ESP Book
  • esp-idf-template

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1138541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【spark客户端】Spark SQL CLI详解:怎么执行sql文件、注释怎么写,支持的文件路径协议、交互式模式使用细节

文章目录 一. Spark SQL Command Line Options(命令行参数)二. The hiverc File1. without the -i2. .hiverc 介绍 三. 支持的路径协议四. 支持的注释类型五. Spark SQL CLI交互式命令六. Examples1. running a query from the command line2. setting Hive configuration vari…

influxdb基本使用及其源码解析

文章目录 基本介绍简介属性特点场景 相关概念seriesseries cardinalityShardShard groupShard DurationRetention policyTSMLSM 源码解析编译IDE调试服务启动metaShardShard groupRetentionPolicyDatabaseInfo Data数据写入SeriesIndexInmem Indextsi index StoreShardEngineTS…

【Javascript】函数之形参与实参

function c(a,b){return ab;}var sumc(3,4);console.log(sum);a,b为形参 3,4为实参 形参和实参是⼀⼀对应的数量可以不对应参数的类型不确定函数可以设置默认参数实参可以是字⾯量也可以是变量

规则推理桌游

目录 Eleusis Express 1&#xff0c;规则 2&#xff0c;出牌规则示例 3&#xff0c;中文规则 Eleusis Express 原文&#xff1a;Eleusis Express 1&#xff0c;规则 简单来说就是需要一个主持人想一个出牌规则&#xff0c;其他人通过出牌试探过程推理出这个出牌规则。 …

python:使用Flask-SQLAlchemy对数据库增删改查的简单示例

以下将介绍Flask-SQLAlchemy对数据库增删改查的简单示例。 一、安装所需的库 pip install flask flask-sqlalchemy flask-mysql 二、创建数据表 本示例使用mysql创建数据库和表 CREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) DEFAULT NULL…

数据结构与算法-二叉树的遍历

&#x1f31e; “少年没有乌托邦&#xff0c;心向远方自明朗&#xff01;” 二叉树 &#x1f388;1.二叉树的遍历&#x1f52d;1.1先序遍历&#x1f52d;1.2中序遍历&#x1f52d;1.3后序遍历&#x1f52d;1.4层次遍历&#x1f52d;1.5二叉树遍历的递归算法&#x1f4dd;1.5.1先…

centos部署tomcat

Java Downloads | Oracle

mq的使用方法

mq的使用方法 1、先写好自己的业务以及只会需要mq异步调用的业务 2、在先前的业务中发送mq消息 mqProducer.syncSend(ActivityRedisConstant.TOPIC_SAVE_SIGNUP, saveSignUpMsg); 3、设定好mq的topic消息主题 Value(“${mq.signup-topic:saas-signup}”)从nacos中取如果没…

java代码审计-换行符CRLF注入

CRLF 的缩写是指回车和换行操作&#xff0c;其中 CR 为 ASCII 中的第 13 个字符&#xff0c;也 写作 \r , LF 是 ASCII 中的第 10 个字符&#xff0c;也写作 \n &#xff0c;因此 CRLF 一般翻译为回车换行注入漏洞。 什么是CRLF注入漏洞? CRLF 即【回车\r换行\n】的简…

Centos安装RabbitMQ,JavaSpring发送RabbitMQ延迟延时消息,JavaSpring消费RabbitMQ消息

1&#xff0c;版本说明 erlang 和 rabbitmq 版本说明 https://www.rabbitmq.com/which-erlang.html 确认需要安装的mq版本以及对应的erlang版本。 2&#xff0c;下载安装文件 RabbitMQ下载地址&#xff1a; https://packagecloud.io/rabbitmq/rabbitmq-server Erlang下载地…

在微信小程序云开发中引入Vant Weapp组件库

介绍 Vant 是一个轻量、可靠的移动端组件库&#xff0c;于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。 介绍 - Vant Weapp (youzan.github.io) Vant Weapp需要安装 node.js&…

nodejs+vue 电子书阅读系统

本文首先介绍了电子书阅读系统的发展背景与发展现状&#xff0c;然后遵循软件常规开发流程&#xff0c;首先针对系统选取适用的语言和开发平台&#xff0c;随着网络技术的不断发展&#xff0c;多媒体技术应用渐渐的出现在教育领域中&#xff0c;电子书阅读已经成为社会的一个热…

02-URL与资源

浏览​因特网资源 URI是一类更通用的资源标识符&#xff0c;URL与URN是它的子集URL通过描述资源的位置来标识资源HTTP规范将更通用的概念URI作为资源标识符&#xff0c;实际上&#xff0c;HTTP应用程序处理的知识URI的URL子集URL可以通过HTTP之外的其他协议来访问资源。 http链…

Unity C#中LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查

LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查 介绍Lua表lua表初始化lua移除引用lua中向表中添加数据lua中表中移除数据lua表中连接数据lua表中数据排序获取lua表长度获取表中最大值 UnityC#中LuaTableUnityC#中LuaArrayTable、LuaDictTable、LuaDictTable<K,V>…

HTTP发起请求与收到响应的大致过程

可以《《透视 HTTP 协议》Windows 10 搭建最小实验环境》搭建环境&#xff0c;之后才能进行下边的操作。 1.鼠标左键点击两下www目录下的start.bat批处理文件。 2.打开Wireshark&#xff0c;然后选择Adapter for loopback traffic capture。 3.然后把tcp.port 80 || udp.…

基于Springboot自习预约管理系统

功能介绍&#xff1a; 基于Springboot自习预约管理系统。该系统为后台管理系统&#xff0c;无前台。主要角色有&#xff1a;管理员和学生。 主要功能&#xff1a; 学生信息管理&#xff1a;学号、姓名、专业、班级、年级、联系方式 教室信息管理&#xff1a;教室、教室号、楼…

el-form那些事

vue3element-plus el-form那些事 输入框后拼接文字 输入框后拼接文字 <el-form-item :label"t(location.locationLength)" prop"locationLength"><el-input v-model"form.locationLength" :placeholder"t(location.inputLocation…

深度学习中语义分割、实例分割、目标检测和图像分类区别

语义分割 实例分割 目标检测 语义分割&#xff1a;需要判断每个像素属于哪一个类别&#xff0c;属于像素级别分类标注 实例分割&#xff1a;相较于语义分割 会将同一类别的不同物体进行分离标注 目标检测&#xff1a;输入图像通常包含多个物体&#xff0c;对物体的位置与类别进…

C# 图解教程 第5版 —— 第9章 表达式和运算符

文章目录 9.1 表达式&#xff08;*&#xff09;9.2 字面量9.2.1 整数字面量9.2.2 实数字面量9.2.3 字符字面量9.2.4 字符串字面量 9.3 求值顺序9.3.1 优先级9.3.2 结合性 9.4 简单算术运算符9.5 求余运算符9.6 关系比较运算符和相等比较运算符9.7 递增运算符和递减运算符&#…

Babylonjs学习笔记(五)——创建PBR材质

书接上回&#xff0c;这里讨论PBR材质&#xff01;&#xff01;&#xff01; // 创建天空盒/* */const createSkyBox (scene:Scene):void>{const envTex CubeTexture.CreateFromPrefilteredData(./env/environment.env,scene)scene.environmentTexture envTex;scene.cre…