ESP32学习记录 PICO DK 踩坑记录

ESP32 PICO DK 踩坑记录

前言

  1. 在某宝上采购了一块稚晖君设计的esp32测试开发板。
  2. 板子非常迷你,屏幕十分炫酷。
  3. 与ESP32 NODE MCU不同,在烧板子的过程中踩了大坑,费了3小时。
  4. 使用PS绘图,经过转换成数组放到板子上一直显示不对,最后还是完美解决了问题。

ESP32 PICO Dk

1. 软件烧录

  1. 直接连上type-c数据线,在Vs Code Platformio 上进行程序烧录时,在进行串口连接时就会显示连接不上,连接超时。
  2. 虽然有时候玄学就连上了,但一直不知道是什么原因。。。
  3. 后来翻遍了CSDN,没找到直接有效的方法。。。
  4. 再后来,终于找到一个博主分享,说下载的时候使IO0 = 0,然后重启,进入下载模式;使IO0 = 1,重启进入工作模式。
  5. 开始不太理解。。然后当我使用杜邦线将IO0与GND相连后,RESET复位重启,程序一下子就下载进去了。下载完就把杜邦线拔掉,再次重启就可以了,程序正常运行。
  6. 而这简单的方法,竟给我狠狠上了一课,因为其他的板子都很少需要这样复杂操作的,真的累了。

烧录连线

2. 0.78寸 OLED 图像显示

1. 使用PS创建128x80 72ppf 的图片,可以添加文字,如下图。
在这里插入图片描述
2. 使用Image2lcd将图片转成C语言数组

  1. 128x80的竖屏OLED,还是使用128x80的宽高,且水平扫描,使我多想了…也弄了好久才成功了。。。

在这里插入图片描述
3. 程序烧录

  1. 最后的效果就是这样,程序文末附上,真是太难了…

图片显示

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);
}

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值