0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何設(shè)計(jì)一個(gè)基于ESP32的微控制器開發(fā)板

科技觀察員 ? 來源:Electro BOY ? 作者:Electro BOY ? 2022-05-25 16:28 ? 次閱讀

最近我設(shè)計(jì)了一個(gè)基于 ESP32微控制器開發(fā)板。我用不同的程序和 Wi-Fi 共享測(cè)試了該板?,F(xiàn)在我將在本文展示原理圖、電路組裝并對(duì)這個(gè) DIY 板進(jìn)行全面審查。

ESP32開發(fā)板:

ESP32 WiFi 和藍(lán)牙芯片最新一代的樂鑫產(chǎn)品。它有一個(gè)雙核32位MCU,內(nèi)部集成了WiFi HT40和藍(lán)牙/BLE 4.2技術(shù)。

poYBAGKN5_iALwPZAAUl4TwJi-4074.png

arduino ESP8266(上一代)相比,ESP32 wifi 和藍(lán)牙芯片(也稱為 ESP wroom 32)具有顯著的性能提升。它配備了高性能雙核 Tensilica LX6 MCU。一個(gè)核心處理高速連接,另一個(gè)用于獨(dú)立應(yīng)用程序開發(fā)。雙核MCU頻率為240 MHz,計(jì)算能力為600 DMIPS。

ESP32芯片(ESP wroom 32)集成了豐富的硬件外設(shè),包括電容式觸摸傳感器、霍爾傳感器、低噪聲傳感器放大器SD接口、以太網(wǎng)接口、高速SDIO/SPI、UART、I2S和I2C等。

特征:

pYYBAGKN6AqANSmzAAfJOvo0xuk367.png

時(shí)鐘頻率高達(dá) 240 MHz 的單核或雙核 32 位 LX6 微處理器

520 KB 的 SRAM、448 KB 的 ROM 和 16 KB 的 RTC SRAM。

支持速度高達(dá) 150 Mbps 的 802.11 b/g/n Wi-Fi 連接。

支持經(jīng)典藍(lán)牙 v4.2 和 BLE 規(guī)范。

34 個(gè)可編程 GPIO。

多達(dá) 18 個(gè) 12 位 SAR ADC 通道和 2 個(gè) 8 位 DAC 通道

串行連接包括 4 x SPI、2 x I2C、2 x I2S、3 x UART。

用于物理 LAN 通信的以太網(wǎng) MAC(需要外部 PHY)。

1 個(gè)用于 SD/SDIO/MMC 的主控制器和 1 個(gè)用于 SDIO/SPI 的從控制器。

電機(jī) PWM 和多達(dá) 16 通道 LED PWM。

安全啟動(dòng)和閃存加密

電路設(shè)計(jì)

poYBAGKN6BWAfI88AALKw8CHexE834.png

我在 EasyEDA 中制作了原理圖。我把USB轉(zhuǎn)串口編程芯片改成了CH340g,方便又便宜。該 IC 需要兩個(gè)晶體管,以便在程序編譯完成時(shí)將 ESP32 的一般模式更改為編程模式。

所需組件:

pYYBAGKN6CiAGCrpAAfZZSJKPvY871.png

1) ESP32 Wi-Fi 模塊

2) Ch340g編程器IC

3) 10K、5k、1K電阻

4) 100nf電容

5)BC547晶體管

6) USB C 型

7)定制PCB

PCB設(shè)計(jì)

如果您想使用設(shè)計(jì),那么這里是下載鏈接,所有 3 個(gè)文件 Gerber、BOM 和 CPL 都是共享的。因此,您可以嘗試JLCPCB的 SMT 服務(wù)。

pYYBAGKN6DKALtYcAAO6Sspn21s408.png

這里我使用藍(lán)色,HASL 表面處理,1.6mm 雙層 PCB。我調(diào)整了組件以匹配市場(chǎng)上可用的原始 ESP32 板的參數(shù)。

測(cè)試:

我用 7 段顯示器測(cè)試了這個(gè) ESP32 模塊,我從 Instructables 上的朋友那里得到了 7 段顯示器的文件。該程序用于在 LCD 上顯示數(shù)字。

poYBAGKN6FGAQX7JAAX2O1gwIrI598.png

注意:我注意到我的設(shè)計(jì)可能存在問題,上傳草圖編程器時(shí)不會(huì)自動(dòng)切換到編程模式。因此,我們必須通過按下 BOOT 和 FLASH 按鈕來給外部觸發(fā)。

7段顯示代碼:

#include

#define PIXELS_PER_SEGMENT 2 // Number of LEDs in each Segment
#define PIXELS_DIGITS 1 // Number of connected Digits
#define PIXELS_PIN 2 // GPIO Pin

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXELS_PER_SEGMENT * 7 * PIXELS_DIGITS, PIXELS_PIN, NEO_GRB + NEO_KHZ800);

//Pixel Arrangement
/*
a
f b
g
e c
d
*/

// Segment array
byte segments[7] = {
//abcdefg
0b0000001, // Segment g
0b0000100, // Segment e
0b0001000, // Segment d
0b0010000, // Segment c
0b0100000, // Segment b
0b1000000, // Segment a
0b0000010 // Segment f
};

//Digits array
byte digits[10] = {
//abcdefg
0b1111110, // 0
0b0110000, // 1
0b1101101, // 2
0b1111001, // 3
0b0110011, // 4
0b1011011, // 5
0b1011111, // 6
0b1110000, // 7
0b1111111, // 8
0b1110011 // 9
};

//Clear all the Pixels
void clearDisplay() {
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0));
}
strip.show();
}

void setup() {
strip.begin();
}

void loop() {
//disp_Seg(200); // Cycle through all segments (DelayTime)
disp_Digits(1000); // Show digits from 0-9 (DelayTime)
//disp_Animation(); // Show some Animations with the segments
//disp_CountUP(500, 450); // Count numbers in Ascending order (NUMBER, DelayTime)
// disp_CountDOWN(500, 250); // Count numbers in Descending order (NUMBER, DelayTime)
}

void disp_Seg(int wait) {
clearDisplay();
for (int d = 0; d < 5; d++) {
for (int i = 6; i > 0; i--) {
for (int n = 0; n < PIXELS_DIGITS; n++) {
writeSegment(n, i);
}
strip.show();
delay(wait);
}
}
}

void disp_Digits(int wait) {
clearDisplay();
for (int i = 0; i < 10; i++) {
for (int n = 0; n < PIXELS_DIGITS; n++) {
writeDigit(n, i);
}
strip.show();
delay(wait);
}
}

void disp_CountUP(int num, int wait) {
clearDisplay();
for (int i = 0; i <= num; i++) {
writeDigit(0, (i / 100) % 10);
writeDigit(1, (i / 10) % 10);
writeDigit(2, (i / 1) % 10);
strip.show();
delay(wait);
}
}

void disp_CountDOWN(int num, int wait) {
clearDisplay();
for (int i = num; i >= 0; i--) {
writeDigit(0, (i / 100) % 10);
writeDigit(1, (i / 10) % 10);
writeDigit(2, (i / 1) % 10);
strip.show();
delay(wait);
}
}

void disp_Animation() {
clearDisplay();
//UP-DOWN
for (int i = 0; i < 7; i++) {
for (int n = 0; n < PIXELS_DIGITS; n++) writeSegment(n, 5);
strip.show();
delay(100);
for (int n = 0; n < PIXELS_DIGITS; n++) writeSegment(n, 0);
strip.show();
delay(100);
for (int n = 0; n < PIXELS_DIGITS; n++) writeSegment(n, 2);
strip.show();
delay(100);
for (int n = 0; n < PIXELS_DIGITS; n++) writeSegment(n, 0);
strip.show();
delay(100);
for (int n = 0; n < PIXELS_DIGITS; n++) writeSegment(n, 5);
strip.show();
delay(100);
}
//LEFT-RIGHT
for (int i = 0; i < 5; i++) {
for (int n = 0; n < PIXELS_DIGITS; n++) {
writeSegment(n, 6);
strip.show();
delay(150);
}
for (int n = PIXELS_DIGITS - 1; n >= 0; n--) {
writeSegment(n, 3);
strip.show();
delay(150);
}
clearDisplay();
for (int n = 0; n < PIXELS_DIGITS; n++) {
writeSegment(n, 1);
strip.show();
delay(150);
}
for (int n = PIXELS_DIGITS - 1; n >= 0; n--) {
writeSegment(n, 4);
strip.show();
delay(150);
}
clearDisplay();
}
//ZIG-ZAG
for (int i = 0; i < 5; i++) {
for (int n = 0; n < PIXELS_DIGITS; n++) {
writeSegment(n, 6);
strip.show();
delay(125);
clearDisplay();
writeSegment(n, 1);
strip.show();
delay(125);
clearDisplay();
writeSegment(n, 4);
strip.show();
delay(125);
clearDisplay();
writeSegment(n, 3);
strip.show();
delay(125);
clearDisplay();
}
}
}

void writeDigit(int index, int val) {
byte digit = digits[val];
for (int i = 6; i >= 0; i--) {
int offset = index * (PIXELS_PER_SEGMENT * 7) + i * PIXELS_PER_SEGMENT;
uint32_t color;
if (digit & 0x01 != 0) {
if (val == 1) color = strip.Color(50, 0, 0);
if (val == 2) color = strip.Color(50, 50, 0);
if (val == 3) color = strip.Color(50, 0, 50);
if (val == 4) color = strip.Color(0, 50, 0);
if (val == 5) color = strip.Color(0, 50, 50);
if (val == 6) color = strip.Color(0, 0, 50);
if (val == 7) color = strip.Color(50, 25, 0);
if (val == 8) color = strip.Color(25, 5, 75);
if (val == 9) color = strip.Color(75, 25, 5);
if (val == 0) color = strip.Color(5, 75, 25);
}
else
color = strip.Color(0, 0, 0);

for (int j = offset; j < offset + PIXELS_PER_SEGMENT; j++) {
strip.setPixelColor(j, color);
}
digit = digit >> 1;
}
}

void writeSegment(int index, int val) {
byte seg = segments[val];
for (int i = 6; i >= 0; i--) {
int offset = index * (PIXELS_PER_SEGMENT * 7) + i * PIXELS_PER_SEGMENT;
uint32_t color;
if (seg & 0x01 != 0) {
if (val == 0) color = strip.Color(50, 0, 0);
if (val == 1) color = strip.Color(0, 50, 50);
if (val == 2) color = strip.Color(0, 50, 0);
if (val == 3) color = strip.Color(50, 0, 50);
if (val == 4) color = strip.Color(50, 50, 50);
if (val == 5) color = strip.Color(0, 0, 50);
if (val == 6) color = strip.Color(50, 50, 0);
}
else
color = strip.Color(0, 0, 0);

for (int j = offset; j < offset + PIXELS_PER_SEGMENT; j++) {
strip.setPixelColor(j, color);
}
seg = seg >> 1;
}
}

可能會(huì)遇到的故障:

1) 如果您不使用 SMT 服務(wù),請(qǐng)正確制作焊點(diǎn)。

2) 焊接時(shí)不要過度加熱 Wi-Fi 模塊。

3)如果微控制器沒有切換到編程模式,則重新啟動(dòng)并使用觸覺按鈕閃爍控制器。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7334

    瀏覽量

    150080
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4768

    瀏覽量

    96150
  • ESP32
    +關(guān)注

    關(guān)注

    17

    文章

    936

    瀏覽量

    16656
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ESP32-WROOM-32開發(fā)板教程

    ESP32-WROOM-32是款功能強(qiáng)大的物聯(lián)網(wǎng)開發(fā)板,它基于Espressif的ESP32芯片,擁有更多的性能和功能。在本篇文章中,我將為您提供
    的頭像 發(fā)表于 12-08 13:55 ?7680次閱讀

    如何從另一個(gè)微控制器更新ESP8266上的閃存?

    我過去在幾個(gè)項(xiàng)目中使用過 ESP8266/ESP32(通常在某些 Adafruit 開發(fā)板上);但現(xiàn)在我有個(gè)小項(xiàng)目,將
    發(fā)表于 05-11 07:08

    基于esp32開發(fā)板

    基于esp32開發(fā)板,用于物聯(lián)網(wǎng)開發(fā)
    發(fā)表于 08-07 08:56 ?105次下載

    如何設(shè)計(jì)微控制器開發(fā)板

     您可以在接口上添加芯片使用您選擇的微控制器來增強(qiáng)您的開發(fā)板為其用戶提供的可用性或功能。
    的頭像 發(fā)表于 08-29 11:04 ?3688次閱讀
    如何設(shè)計(jì)<b class='flag-5'>微控制器</b><b class='flag-5'>開發(fā)板</b>

    esp32 藍(lán)牙 wifi共存_、ESP32開發(fā)板NodeMCU-32S簡介

    目錄NodeMCU-32S引腳功能上資源總結(jié)功能特點(diǎn)NodeMCU-32SNodeMCU-32S是基于 ESP32-32S 模組設(shè)計(jì)的款較為經(jīng)典的ESP32
    發(fā)表于 11-18 18:36 ?28次下載
    <b class='flag-5'>esp32</b> 藍(lán)牙 wifi共存_<b class='flag-5'>一</b>、<b class='flag-5'>ESP32</b><b class='flag-5'>開發(fā)板</b>NodeMCU-32S簡介

    ESP32迷你開發(fā)板設(shè)計(jì)開源分享

    電子發(fā)燒友網(wǎng)站提供《ESP32迷你開發(fā)板設(shè)計(jì)開源分享.zip》資料免費(fèi)下載
    發(fā)表于 07-11 11:42 ?6次下載
    <b class='flag-5'>ESP32</b>迷你<b class='flag-5'>開發(fā)板</b>設(shè)計(jì)開源分享

    LoRa ESP32 TKoala開發(fā)板

    電子發(fā)燒友網(wǎng)站提供《LoRa ESP32 TKoala開發(fā)板.zip》資料免費(fèi)下載
    發(fā)表于 07-21 10:10 ?2次下載
    LoRa <b class='flag-5'>ESP32</b> TKoala<b class='flag-5'>開發(fā)板</b>

    ESP32開發(fā)板驅(qū)動(dòng)下載

    ESP32開發(fā)板驅(qū)動(dòng)免費(fèi)下載。
    發(fā)表于 07-28 15:15 ?54次下載

    ESP32 LED控制器

    電子發(fā)燒友網(wǎng)站提供《ESP32 LED控制器.zip》資料免費(fèi)下載
    發(fā)表于 08-05 11:41 ?3次下載
    <b class='flag-5'>ESP32</b> LED<b class='flag-5'>控制器</b><b class='flag-5'>板</b>

    ESP32 S3 WROOM開發(fā)板

    電子發(fā)燒友網(wǎng)站提供《ESP32 S3 WROOM開發(fā)板.zip》資料免費(fèi)下載
    發(fā)表于 08-22 15:44 ?9次下載
    <b class='flag-5'>ESP32</b> S3 WROOM<b class='flag-5'>開發(fā)板</b>

    ESP32 S微控制器開源分享

    電子發(fā)燒友網(wǎng)站提供《ESP32 S微控制器開源分享.zip》資料免費(fèi)下載
    發(fā)表于 10-19 11:38 ?0次下載
    <b class='flag-5'>ESP32</b> S<b class='flag-5'>微控制器</b>開源分享

    ESP32 Pico開發(fā)板開源

    電子發(fā)燒友網(wǎng)站提供《ESP32 Pico開發(fā)板開源.zip》資料免費(fèi)下載
    發(fā)表于 01-04 10:10 ?5次下載
    <b class='flag-5'>ESP32</b> Pico<b class='flag-5'>開發(fā)板</b>開源

    合宙ESP32-S3開發(fā)板特性解讀

    穿越萬水千山,奔赴與工程師朋友的約定——合宙ESP32-S3超值MCU開發(fā)板,來了! 1 合宙ESP32-S3開發(fā)板簡介 合宙CORE-ESP32
    的頭像 發(fā)表于 01-11 18:45 ?9476次閱讀

    基于ESP32S3系列模組的開發(fā)板

    基于ESP32S3系列模組的開發(fā)板
    的頭像 發(fā)表于 04-10 11:25 ?3496次閱讀
    基于<b class='flag-5'>ESP32</b>S3系列模組的<b class='flag-5'>開發(fā)板</b>

    ESP32-C2 8682芯片開發(fā)板開發(fā)演示

    ESP32-C2開發(fā)板開發(fā)演示
    的頭像 發(fā)表于 07-06 13:38 ?462次閱讀
    <b class='flag-5'>ESP32</b>-C2  8682芯片<b class='flag-5'>開發(fā)板</b><b class='flag-5'>開發(fā)</b>演示