学习ESP32笔记(VSCode下面基于Arduino开发)
1.platform IO插件的下载(提前安装好python,要下载3.5以上的Python,不然在中间的一部分会一直报错)
VS Code下载platform IO时,开加速器(VPN),并且关闭防火墙
这一步比较慢,大概等十来分钟。
下面这个就是下载成功。
2.创建ESP32Demo
关闭防火墙,用手机热点给电脑连接,打开VPN(在早上创建成功的,早上是玄学),或者也可以不用VPN?
3.代码的编译和下载
编译
下载
那个端口它是自动选择的,不用你自己去选
串口的选择也可以自己选
可以看到开发板上面的灯会闪烁
4.快捷键的设置
5.添加别人写的代码工程
添加完成之后,然后打开(多刷新几遍,就是多点Projects下面的那几个选项)
在这边就能看到你所添加的工程文件
在这边选择你要编译的工程
在文件中修改的代码,最终都会修改到这个工程指向的路径的文件
没有工作区间了,就在这打开以前打开的文件
6.其余库的安装
库的删除
然后在platformio.ini中删除你刚删除库在lib_deps中对应的名字,这样就能完全删除库了
示例的阅读,和将这个库加入到你选择的工程里面(和Arduino IDE差不多)
7.ESP32关于PlatformIO的配置信息
看哔站的ESP32的BLE_哔哩哔哩_bilibiliP8
8.ESP32与FreeRTOS
FreeRTOS - ESP32 - — ESP-IDF 编程指南 v4.3 文档 (espressif.com)
9.ESP32外围电路设计(具体在乐鑫官网查看)
然后根据需求选择,我这选择模组
点进去就能看到他的规格书了
在往下拉,就能看到他的原理图了
10.ESP32代码示例(具体在乐鑫官网查看)
11.API参考
太极创客Arduino编程语句参考
ESP8266-Arduino库 开发参考资料
因为是在VSCode下面基于Arduino开发,所以一些函数可以用ESP8266的来开发
ESP32教程一:arduino环境搭建(这里面有怎么下载ESP32arduino例程的教程)
12.ESP32之FreeRTOS使用
发现不用移植FreeRTOS,就可以用创建任务函数,可能VScode中自带了?
ESP32-Arduino中的FreeRTOS使用
在platformio中不需要引入FreeRTOS的头文件,直接可用
------------------------------分割线----------------------------------------------
当你用platformio创建第一个项目的时候,就已经帮你下载好了freertos,不用你再去移植了
**只要包含了这个头文件:#include <Arduino.h>就可以去使用FreeRTOS了 **
代码如下:
/*
// 多线程基于FreeRTOS,可以多个任务并行处理;
// ESP32具有两个32位Tensilica Xtensa LX6微处理器;
// 实际上我们用Arduino进行编程时只使用到了第一个核(大核),第0核并没有使用
// 多线程可以指定在那个核运行;
*/
#include <Arduino.h>
#define USE_MULTCORE 0
void xTaskOne(void *xTask1)
{
while (1)
{
Serial.printf("Task1 \r\n");
delay(500);
}
}
void xTaskTwo(void *xTask2)
{
while (1)
{
Serial.printf("Task2 \r\n");
delay(1000);
}
}
void setup()
{
Serial.begin(115200);
delay(10);
}
void loop()
{
#if !USE_MULTCORE
xTaskCreate(
xTaskOne, /* Task function. */
"TaskOne", /* String with name of task. */
4096, /* Stack size in bytes. */
NULL, /* Parameter passed as input of the task */
1, /* Priority of the task.(configMAX_PRIORITIES - 1 being the highest, and 0 being the lowest.) */
NULL); /* Task handle. */
xTaskCreate(
xTaskTwo, /* Task function. */
"TaskTwo", /* String with name of task. */
4096, /* Stack size in bytes. */
NULL, /* Parameter passed as input of the task */
2, /* Priority of the task.(configMAX_PRIORITIES - 1 being the highest, and 0 being the lowest.) */
NULL); /* Task handle. */
#else
//最后一个参数至关重要,决定这个任务创建在哪个核上.PRO_CPU 为 0, APP_CPU 为 1,或者 tskNO_AFFINITY 允许任务在两者上运行.
xTaskCreatePinnedToCore(xTaskOne, "TaskOne", 4096, NULL, 1, NULL, 0);
xTaskCreatePinnedToCore(xTaskTwo, "TaskTwo", 4096, NULL, 2, NULL, 1);
#endif
while (1)
{
Serial.printf("XTask is running\r\n");
delay(1000);
}
}