Play ESP32-C3 with Arduino
本来为了ESP32-C3刷上LVGL,才玩Arduino。但是Arduino确实没MicroPython好玩,而且,我真的需要LVGL吗?这里先记录一下相关操作。
1 刷Arduino固件
使用Arduino IDE操作,最简单。
参考教程:
- Getting Started With Espressif’s ESP32-C3-DevKITM-1 On Arduino IDE
https://www.electronics-lab.com/getting-started-with-espressifs-esp32-c3-devkitm-1-on-arduino-ide/
1.1 设置开发板为ESP32-C3
安装好Arduino IDE(本文所用版本是1.8.19),运行。进入“File” -> “Preferences” -> “Settings”,在“Additional Boards Manager URLs”输入以下网址,并点“OK”。
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
要注意,如果本机不能访问以上链接,可在“File” -> “Preferences” -> “Network”设置代理。
然后进入“Tools” -> “Board: xxx” -> “Boards Manager…”。在“Boards Manager”弹出框,搜“esp32”,并选择最高版本,点“Install”。
安装完成后,再次进入“Tools” -> “Board: xxx”,选中“ESP32C3 Dev Module”即可。可以看到“Tools”菜单显示“Board: ESP32C3 Dev Module”,并在下面显示硬件相关信息。
1.2 刷入固件
先在“Tools” -> “Flash Mode”要选“DIO”(这个很重要), 再点“Tools” -> “Burn Bootloader”,等待刷入成功即可。
“Tools”显示的硬件信息参考:
Board: "ESP32C3 Dev Module"
Upload Speed: "921600"
USB CDC on Boot: "Disabled"
CPU Frequency: "160MHz (WiFi)"
Flash Frequency: "80MHz"
Flash Mode: "DIO"
Flash Size: "4MB (32Mb)"
Partition Scheme: "Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"
Core Debug Level: "None"
Erase All Flash before Sketch Upload: "Disabled"
Port: "/dev/ttyACM0"
2 使用I2C OLED屏
这里使用的I2C OLED屏,SSD1315(可用SSD1306的驱动),0.96寸,4针。详细参考如下:
- Arduino库之U8g2lib
https://toddzhoufeng.github.io/document/2019/03/23/u8glib/
2.1 接线
OLED屏 | ESP32-C3 | |
---|---|---|
GND | <--> | 25, GND |
VCC | <--> | 26, 3.3V |
SCL | <--> | 27, GPIO05, I2C_SCL |
SDA | <--> | 28, GPIO04, I2C_SDA |
2.2 示例代码
以下示例是在屏幕上显示一行文字”Hello, Fox!“。其最麻烦的地方,是找个合适的字体。上传程序前,记得“Tools” -> “Flash Mode”要选“DIO”。
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 5, /* data=*/ 4);
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_chargen_92_mf); // choose a suitable font
u8g2.drawStr(0,14,"Hello, Fox!"); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
delay(1000);
}