ESP32 PICO DK 踩坑记录
前言
- 在某宝上采购了一块稚晖君设计的esp32测试开发板。
- 板子非常迷你,屏幕十分炫酷。
- 与ESP32 NODE MCU不同,在烧板子的过程中踩了大坑,费了3小时。
- 使用PS绘图,经过转换成数组放到板子上一直显示不对,最后还是完美解决了问题。
1. 软件烧录
- 直接连上type-c数据线,在Vs Code Platformio 上进行程序烧录时,在进行串口连接时就会显示连接不上,连接超时。
- 虽然有时候玄学就连上了,但一直不知道是什么原因。。。
- 后来翻遍了CSDN,没找到直接有效的方法。。。
- 再后来,终于找到一个博主分享,说下载的时候使IO0 = 0,然后重启,进入下载模式;使IO0 = 1,重启进入工作模式。
- 开始不太理解。。然后当我使用杜邦线将IO0与GND相连后,RESET复位重启,程序一下子就下载进去了。下载完就把杜邦线拔掉,再次重启就可以了,程序正常运行。
- 而这简单的方法,竟给我狠狠上了一课,因为其他的板子都很少需要这样复杂操作的,真的累了。
2. 0.78寸 OLED 图像显示
1. 使用PS创建128x80 72ppf 的图片,可以添加文字,如下图。
2. 使用Image2lcd将图片转成C语言数组
- 128x80的竖屏OLED,还是使用128x80的宽高,且水平扫描,使我多想了…也弄了好久才成功了。。。
3. 程序烧录
- 最后的效果就是这样,程序文末附上,真是太难了…
3. 程序
1. 板载MPU6050,所以也加上了相应的驱动程序,图片作为开机前奏
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <WiFi.h>
#include <Ticker.h>
#include <U8g2lib.h>
Adafruit_MPU6050 mpu;
#define LED_PIN 27
Ticker blinker;
U8G2_SH1107_128X80_F_HW_I2C u8g2(U8G2_R1, /* reset=*/U8X8_PIN_NONE, /* clock=*/22, /* data=*/21);
const unsigned char gImage_pico[1280] = { /* 0X20,0X01,0X80,0X00,0X50,0X00, */
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0XC0,0XFF,0X81,0X0F,0XF0,0X3F,0XE0,0X3F,0X00,0XC0,0XFF,0X03,0X7C,0XF8,0X03,
0X00,0XC0,0XFF,0X87,0X0F,0XFC,0X3F,0XF8,0XFF,0X00,0XC0,0XFF,0X0F,0X7C,0XF8,0X03,
0X00,0XC0,0XFF,0X87,0X0F,0XFE,0X3F,0XFC,0XFF,0X00,0XC0,0XFF,0X1F,0X7C,0XFC,0X00,
0X00,0XC0,0XFF,0X87,0X0F,0XFF,0X3F,0XFE,0XFF,0X01,0XC0,0XFF,0X1F,0X7C,0X7E,0X00,
0X00,0XE0,0XC7,0XC7,0X8F,0X7F,0X30,0X7F,0XF8,0X01,0XE0,0XC7,0X3F,0X7E,0X3F,0X00,
0X00,0XE0,0XC3,0XC7,0X87,0X1F,0X00,0X3F,0XF0,0X01,0XE0,0X03,0X3F,0XBE,0X1F,0X00,
0X00,0XE0,0XC3,0XC7,0XC7,0X0F,0X80,0X1F,0XF0,0X01,0XE0,0X03,0X3F,0XFE,0X0F,0X00,
0X00,0XE0,0XE3,0XC7,0XC7,0X07,0X80,0X0F,0XF0,0X03,0XE0,0X03,0X3E,0XFE,0X07,0X00,
0X00,0XE0,0XF3,0XC7,0XC7,0X07,0X80,0X0F,0XF0,0X03,0XE0,0X03,0X3E,0XFE,0X03,0X00,
0X00,0XE0,0XFF,0XC3,0XE7,0X07,0XC0,0X0F,0XF0,0X01,0XE0,0X03,0X3F,0XFE,0X03,0X00,
0X00,0XF0,0XFF,0XE1,0XE3,0X07,0XC0,0X0F,0XF0,0X01,0XF0,0X01,0X3F,0XFF,0X07,0X00,
0X00,0XF0,0XFF,0XE0,0XE3,0X07,0XC0,0X0F,0XF8,0X01,0XF0,0X01,0X1F,0XFF,0X07,0X00,
0X00,0XF0,0X1F,0XE0,0XE3,0X07,0XC0,0X0F,0XF8,0X01,0XF0,0X81,0X1F,0XDF,0X0F,0X00,
0X00,0XF0,0X01,0XE0,0XE3,0X07,0XC0,0X0F,0XFC,0X00,0XF0,0XC1,0X0F,0XDF,0X0F,0X00,
0X00,0XF0,0X01,0XE0,0XC3,0X1F,0X8E,0X1F,0X7E,0X00,0XF0,0XF1,0X0F,0X9F,0X1F,0X00,
0X00,0XF0,0X01,0XE0,0XC3,0XFF,0X8F,0XFF,0X7F,0X00,0XF0,0XFF,0X07,0X9F,0X1F,0X00,
0X00,0XF8,0X00,0XF0,0XC1,0XFF,0X07,0XFF,0X3F,0X00,0XF8,0XFF,0X83,0X0F,0X3F,0X00,
0X00,0XF8,0X00,0XF0,0X81,0XFF,0X07,0XFF,0X1F,0X00,0XF8,0XFF,0X80,0X0F,0X7F,0X00,
0X00,0XF8,0X00,0XF0,0X01,0XFE,0X07,0XFC,0X07,0X00,0XF8,0X3F,0X80,0X0F,0X7E,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7F,0X00,
0X00,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7F,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XC0,0X7F,0XF8,0XE1,0X0F,0XF8,0X01,0X1F,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XC0,0X7F,0XFE,0XE3,0X3F,0XFC,0XC3,0X3F,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XC0,0X7F,0XFF,0XE3,0X7F,0XFC,0XC3,0X7F,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XE0,0X3F,0XFF,0XF3,0X7F,0XCC,0XE3,0X7D,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XE0,0X01,0X0F,0XF0,0X78,0XC0,0X63,0X78,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XE0,0X01,0X1F,0XF0,0X78,0XE0,0X03,0X7C,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XE0,0X1F,0X7F,0XF0,0X7C,0XFC,0X03,0X3E,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XE0,0X1F,0XFF,0XF0,0X3F,0XFC,0X01,0X3F,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XE0,0X1F,0XFE,0XF1,0X3F,0XFC,0XC3,0X1F,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XF0,0X00,0XF8,0XF9,0X0F,0XE0,0XE3,0X07,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XF0,0X00,0XF0,0X79,0X00,0XC0,0XF3,0X03,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XF0,0XC0,0XF1,0X79,0X00,0XE3,0XF3,0X01,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XF0,0XDF,0XFF,0X78,0X00,0XFF,0XF9,0X1F,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XF0,0XDF,0XFF,0X78,0X80,0XFF,0XF8,0X1F,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XF0,0XDF,0X3F,0X78,0X80,0X7F,0XF8,0X1F,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X80,0X07,0X0E,0X00,0X00,0X00,0X0E,0X00,0X00,0X00,0XE0,0X01,0XC0,0X03,0X00,
0X00,0X00,0X07,0X0E,0X00,0X00,0X00,0X07,0X00,0X00,0X00,0XF8,0X03,0XE0,0X07,0X00,
0X00,0X00,0X07,0X07,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X98,0X07,0X70,0X0F,0X00,
0X00,0X00,0X07,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X07,0X38,0X0E,0X00,
0X00,0X00,0X87,0X83,0X07,0X37,0X3E,0X07,0X1F,0XEE,0X01,0X00,0X07,0X18,0X0E,0X00,
0X00,0X00,0X87,0XC1,0X0F,0XBF,0X1F,0X87,0X3F,0XFE,0X03,0X80,0X03,0X1C,0X0E,0X00,
0X00,0X00,0XC6,0XE1,0X1C,0XFF,0X11,0XC3,0X79,0XCE,0X03,0XC0,0X03,0X1C,0X0E,0X00,
0X00,0X00,0XCE,0X70,0X9C,0XC7,0X81,0XE3,0X70,0X87,0X03,0XE0,0X01,0X1C,0X0E,0X00,
0X00,0X00,0XEE,0XF0,0X9F,0XC3,0X87,0XE3,0X70,0X87,0X01,0X78,0X00,0X1C,0X07,0X00,
0X00,0X00,0X6E,0XF0,0X9F,0X83,0X9F,0X63,0X70,0XC7,0X01,0X3C,0X00,0X1C,0X07,0X00,
0X00,0X00,0X7E,0X38,0X80,0X03,0X9C,0X73,0X70,0XC7,0X01,0X1E,0X00,0X1C,0X07,0X00,
0X00,0X00,0X3E,0X70,0X88,0X23,0X9C,0XE3,0X38,0XC7,0X01,0X0E,0X30,0X9C,0X03,0X00,
0X00,0X00,0X3C,0XF0,0X87,0XE1,0X8F,0XE1,0X1F,0XC3,0X01,0XFF,0X79,0XFC,0X01,0X00,
0X00,0X00,0X1C,0XE0,0XC7,0XE1,0XC7,0XC1,0X8F,0XC3,0X01,0XFF,0X39,0XF8,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
};
static char mac_address[18];
/**
* @brief 快速图片显示调用函数
*
* @param time 时间设置
* @param gImage 图片指针
*/
void display(int time, const unsigned char* gImage){
int count = 0;
u8g2.firstPage();
while(true){
count++;
if(count > time){
break;
}
do {
u8g2.drawXBM(0, 0, 128, 80, gImage);
} while (u8g2.nextPage());
}
}
void blink()
{
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
}
const char *get_mac_address(void)
{
static uint8_t _mac_array_ap[6];
static char _mac_char_ap[18];
WiFi.macAddress(_mac_array_ap);
for (int i = 0; i < sizeof(_mac_array_ap); ++i)
{
sprintf(_mac_char_ap, "%s%02x", _mac_char_ap, _mac_array_ap[i]);
}
return _mac_char_ap;
};
void refresh_display(sensors_event_t gyroscope)
{
u8g2.clearBuffer();
u8g2.setCursor(0, 15);
u8g2.print("MAC:");
u8g2.print(mac_address);
u8g2.setCursor(0, 40);
u8g2.print("ESP32-PicoDK"); // Chinese "Hello World"
u8g2.setCursor(0, 65);
u8g2.print(gyroscope.gyro.x, 1);
u8g2.print(", ");
u8g2.print(gyroscope.gyro.y, 1);
u8g2.print(", ");
u8g2.print(gyroscope.gyro.z, 1);
u8g2.println("");
u8g2.sendBuffer();
}
void mpu_init(void)
{
static uint8_t retry = 50;
static uint8_t retry_itv = 100;
u8g2.clearBuffer();
u8g2.setCursor(0, 15);
u8g2.print("MPU Init... ");
u8g2.print(retry / 10);
u8g2.print(" s");
u8g2.sendBuffer();
while (!mpu.begin(0x69, &Wire1))
{
if (retry <= 0)
{
Serial.println("MPU Sensor init failed");
Serial.println("Reboot...");
u8g2.clearBuffer();
u8g2.setCursor(0, 15);
u8g2.print("MPU Init Failed");
u8g2.setCursor(0, 40);
u8g2.print("Reboot..."); // Chinese "Hello World"
u8g2.sendBuffer();
delay(1000);
ESP.restart();
}
if (retry % 10 == 0)
{
u8g2.clearBuffer();
u8g2.setCursor(0, 15);
u8g2.print("MPU Init... ");
u8g2.print(retry / 10);
u8g2.print(" s");
u8g2.sendBuffer();
}
retry--;
delay(retry_itv);
}
}
void setup()
{
pinMode(LED_PIN, OUTPUT);
// digitalWrite(LED_PIN, LOW);
blinker.attach_ms(500, blink);
u8g2.begin();
u8g2.enableUTF8Print(); // enable UTF8 support for the Arduino print() function
u8g2.setFont(u8g2_font_unifont_t_chinese2); // use chinese2 for all the glyphs of "你好世界"
u8g2.setFontDirection(0); // 转向
Serial.begin(115200);
display(1000, gImage_pico);
Serial.println("\r\n\r\n");
Serial.println("------------------------------------------");
Serial.println("| MPU6050 + OLED Demo |");
Serial.println("------------------------------------------");
Wire1.begin(32, 33);
Wire1.setClock(400000);
strcpy(mac_address, get_mac_address());
delay(200);
Serial.printf("\r\nESP32 Chip model = %s Rev %d\n", ESP.getChipModel(), ESP.getChipRevision());
Serial.printf("This chip has %d cores\n", ESP.getChipCores());
Serial.printf("Chip Mac Address = %s \n", mac_address);
Serial.println("\r\n\r\n");
mpu_init();
Serial.println("Found a MPU-6050 sensor");
blinker.detach();
blinker.attach_ms(100, blink);
delay(500);
}
void loop()
{
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
Serial.print("Accelerometer ");
Serial.print("X: ");
Serial.print(a.acceleration.x, 1);
Serial.print(" m/s^2, ");
Serial.print("Y: ");
Serial.print(a.acceleration.y, 1);
Serial.print(" m/s^2, ");
Serial.print("Z: ");
Serial.print(a.acceleration.z, 1);
Serial.println(" m/s^2");
Serial.print("Gyroscope ");
Serial.print("X: ");
Serial.print(g.gyro.x, 1);
Serial.print(" rps, ");
Serial.print("Y: ");
Serial.print(g.gyro.y, 1);
Serial.print(" rps, ");
Serial.print("Z: ");
Serial.print(g.gyro.z, 1);
Serial.println(" rps");
refresh_display(g);
delay(1);
}