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

文章目录

  • 说在前面
  • 流程
  • 可能的问题
    • 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")?; // 国内dnslet 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
  • 每次更改了依赖之后,build都会重下esp-idf
    解决:在首次安装好esp-idf后将IDF_PATH环境变量设置好
    vi ~/.bashrc # 并将下述语句添加到文件最后 下述路径即esp-idf的安装路径 自行更改
    export IDF_PATH="/home/le/.espressif/esp-idf/v5.1.1"
    
    同样,也可以将rust-buildexport-esp.shLIBCLANG_PATHPATH加进去

测试

  • 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 chipCTRL+C    ExitI (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
  • Using esp-idf-sys without downloading anything

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10 javaweb 项目8080端口被占用

文章目录 前言出现场景&#xff1a;解决思路&#xff1a; 前言 提示&#xff1a;生活该走向何处&#xff1f;也许你还不知道答案&#xff0c;但是你一定是答案的一部分。 出现场景&#xff1a; 解决思路&#xff1a; 找到运行的进程直接干掉 打开命令窗口&#xff08;win r…

手机平板摄像头如何给电脑用来开视频会议

环境&#xff1a; Iriun Webcam EV虚拟摄像头 钉钉会议 问题描述&#xff1a; 手机平板摄像头如何给电脑用来开视频会议 解决方案&#xff1a; 1.下载软件 手机端和电脑端都下载这个软件&#xff0c;连接同一局域网打开软件连接好 另外一款软件Iriun 也是一样操作 2.打…

【Linux】NTP服务器配置、时间修改

查看当前系统时间date修改当前系统时间date -s "2018-2-22 19:10:30"查看硬件时间hwclock --show修改硬件时间hwclock --set --date "2018-2-22 19:10:30"同步系统时间和硬件时间hwclock --hctosys保存时钟clock –w1.设置NTP Server服务检查系统是否安装n…

SpringBoot中CommandLineRunner详解(含源码)

文章目录 前言实例导入库application.yamlRunnerSpringBootCommandLineRunnerApplication执行结果 先后顺序示例OrderRunner1OrderRunner2执行结果 通常用法加载初始化数据示例 启动后打印应用信息示例 启动异步任务示例 接口健康检查示例 外部服务调用示例 参数校验示例 动态设…

Apache Doris (四十八): Doris表结构变更-替换表

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

力扣第968题 监控二叉树 c++ hard题 二叉树的后序遍历 + 模拟 + 贪心

题目 968. 监控二叉树 困难 相关标签 树 深度优先搜索 动态规划 二叉树 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 1&#xff1a; …

在CentOS上用yum方式安装MySQL8真实全过程记录(顺利版本)

此文参考我前面的文章《在CentOS上用yum方式安装MySQL8过程记录》&#xff0c;之前比较曲折&#xff0c;现在再安装一台mysql。 因为之前很多坑已经走过&#xff0c;加上这台Linux之前没安装过MYSQL&#xff0c;所以整个过程算是非常顺利。 安装环境&#xff1a;centos7 mysql…

如何实现可靠的数据调度同步,数据同步方案看一下!

随着企业规模不断扩大&#xff0c;分支机构越来越多&#xff0c;跨区域跨国的集团越来越多&#xff0c;越来越多的企业要求内部各种业务数据在服务器、数据中心甚至云上&#xff0c;能够进行实时的调度和同步&#xff0c;从而需要部署一套数据同步方案&#xff0c;实现服务器与…

甘特图组件DHTMLX Gantt用例 - 如何自定义任务、月标记和网格新外观

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 本文将为大家揭示DHTMLX Gantt自定义的典型用例&#xff0c;包括自定义任务、网格的新外观等&#xff0c;来展示其功能的强大性&…

浙江爱知道控股集团,数字化经营的实践者,科技降本增效,助力基业长青

拥抱时代浪潮&#xff0c;加速科技变革。10月27日&#xff0c;浙江爱知道控股集团于西子智慧产业园西子音乐厅举办“AIGC可持续发展峰会”&#xff0c;重点探讨了数字化经营的重要意义。 提高效率和降低成本&#xff1a;数字化经营可以优化和自动化企业的业务流程&#xff0c;提…

软信天成:数据质量管理对企业有什么意义?

在这个信息爆炸的时代&#xff0c;数据已经成为了企业决策的基础&#xff0c;是企业成功的关键要素。然而&#xff0c;如果企业所获取的数据质量不佳&#xff0c;会对企业产生何种影响呢&#xff1f; 事实上&#xff0c;有效而准确的数据可以揭示出潜在的业务机遇&#xff0c;…

接触式静电压测量仪的用途和操作方法

接触式静电压测量仪是一种用于测量静电电荷的仪器&#xff0c;主要用于工业生产和科学研究领域。它可以测量静电电压、静电场强、静电电荷等参数&#xff0c;对于静电控制和环境监测等方面具有重要的作用。 接触式静电压测量仪的操作方法如下&#xff1a; 接通电源&#xff1a;…

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(1)

先看卷积是啥&#xff0c;url: https://www.bilibili.com/video/BV1JX4y1K7Dr/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 下面这个式子就是卷积 看完了&#xff0c;感觉似懂非懂 下一个参考视频&#xff1a;https://www.y…

【设计模式】第20节:行为型模式之“备忘录模式”

一、简介 备忘录模式也叫快照模式&#xff0c;具体来说&#xff0c;就是在不违背封装原则的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便之后恢复对象为先前的状态。这个模式的定义表达了两部分内容&#xff1a;一部分是…

智慧公厕:打造城市卫生环境提升与革新的新利器

智慧公厕是一种结合先进科技和公共厕所管理的新型智慧管理系统&#xff0c;其主要功能是为市民提供更加便捷、舒适、卫生的厕所使用体验&#xff0c;为管理单位提供一种信息化、数字化、智慧化的管理方式&#xff0c;是城市管理的一个重要领域。 在现代都市生活中&#xff0c;…

Centos7 安装和配置 Redis 5 教程

在Centos上安装Redis 5&#xff0c;如果是 Centos8&#xff0c;那么 yum 仓库中默认的 redis 版本就是 5&#xff0c;直接 yum install 即可。但如果是 Centos7&#xff0c;yum 仓库中默认的 redis 版本是 3 系列&#xff0c;比较老&#xff1a; 通过 yum list | grep redis 命…

2023/10/29总结

总结 踩坑记录 写代码的时候遇到了一个错误大概是这样的 io.jsonwebtoken.security.WeakKeyException: The signing keys size is 48 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used…

Java I/O (输入/输出)

1.流的概念 流是一种有序的数据序列&#xff0c;根据操作类型&#xff0c;可以分为输入流和输出流两种。I/O流&#xff08;输入输出&#xff09;提供了一条通道程序&#xff0c;可以使用这条通道把源中的字节序列送到目的地。 1.1 输入流&#xff1a; 程序从指向源的输入流中读…

【Overload游戏引擎细节分析】standard材质Shader

提示&#xff1a;Shader属于GPU编程&#xff0c;难写难调试&#xff0c;阅读本文需有一定的OpenGL基础&#xff0c;可以写简单的Shader&#xff0c;不适合不会OpenGL的朋友 一、Blinn-Phong光照模型 Blinn-Phong光照模型&#xff0c;又称为Blinn-phong反射模型&#xff08;Bli…

【C++项目】高并发内存池项目第八讲 项目总结和面试问题分享

项目总结面试分享 1.项目总结1.1优点1.2不足1.3面试常见问题 2.面试分享项目部分C语法部分 项目源代码&#xff1a;高并发内存池 1.项目总结 1.1优点 增加动态申请的效率减少陷入内核的次数减少系统内存碎片提升内存使用率尽量减少锁竞争应用于多核多线程场景 1.2不足 当前…