开发板购买链接
https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=626366733674
ESP32例程为C语言开发,并非Python/Arduino/AT指令开发,基于ESP-IDF_V4.2框架库,采用纯C语言开发,开发工具为Visual Studio Code
Android(安卓)例程全部为原生Android开发,例程全部支持到SDK版本29 Android 10.0(Q) 开发工具为Andirod Studio 4.0
PC源码例程为Visual Studio 2013开发,C++语言,基于MFC
送的MQTT账号,仅用于同学们开发测试,大家不要用到实际产品上,不定期更换密码,会在QQ群公布
以下列出的例程源码均编写完成(不断增加中),开发教程正在编写
基础例程:
0_Hello Bug (ESP_LOGX与printf) 工程模板/打印调试输出
1_LED LED亮灭控制
2_LED_Task 使用任务方式控制LED
3_LEDC_PWM 使用LEDC来控制LED实现呼吸灯效果
4_ADC_LightR 使用ADC读取光敏电阻实现光照传感
5_KEY_Short_Long 按钮长按短按实现
6_TouchPad_Interrupt 电容触摸中断实现
7_WS2812_RMT 使用RMT实现RGB_LED彩虹变色示例
8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器
9_SPI_SDCard 使用SPI总线实现TF卡文件系统示例
10_IIC_ADXL345 使用IIC总线实现读取ADXL345角度加速度传感器
11_IIC_AT24C02 使用IIC总线实现小容量数据储存测试
12_IR_Rev_RMT 使用RMT实现红外遥控接收解码(NEC编码)
13_IR_Send_RMT 使用RMT实现红外数据发送(NEC编码)
14_WIFI_Scan 附近WIFI信号扫描示例
15_WIFI_AP 创建软AP示例
16_WIFI_AP_TCP_Server 在软AP模式下实现TCP服务端
17_WIFI_AP_TCP_Client 在软AP模式下实现TCP客户端
18_WIFI_AP_UDP 在软AP模式下实现UDP通讯
19_WIFI_STA 创建STA站模连接路由器
20_WIFI_STA_TCP_Server 在站模式STA下实现TCP服务端
21_WIFI_STA_TCP_Client 在站模式STA下实现TCP客户端
22_WIFI_STA_UDP 在站模式STA下实现UDP通讯
23_LCD_Test LCD液晶触摸屏显示测试
24_XPT2046_Touch_Test 电阻触摸XPT2046驱动测试触摸校正
ESP32应用例程
Bluetooth_RGBLight Android手机通过蓝牙控制RGB灯变色
Bluetooth_Sensor Android手机通过蓝牙读取开发板姿态和温度湿度参数
Bluetooth_Test Android手机通过蓝牙与开发板通讯
Encryption_MD5 MD5加密
Encryption_SHA1 SHA1加密
Encryption_SHA256 SHA256加密
EncryptionDecrypt_AES_CBC AES_CBC加密
EncryptionDecrypt_AES_ECB AES_ECB加密
ESP32_SmartConfig 通过Android手机配置WIFI连网
HTTP_GET_Request_Weather HTTP Get请求天气预报
JSON_Package 创建JSON数据包
JSON_Parsing 解析JSON数据包
LCD JPEG_Effect 解码JGEG图片特效显示
MQTT MQTT通讯测试
Android(安卓)工具源码
ESP32_Bluetooth_Chat Android通过蓝牙与开发板通讯测试
ESP32_Bluetooth_RGBLight Android通过蓝牙控制开发板RGB灯
ESP32_Bluetooth_Sensor Android通过蓝牙读取开发板3D姿态和温度湿度数据
ESP32_SmartConfig Android手机配置WIFI配网
MQTT_Test Android与开发板通过MQTT协议通讯
TCP_Client Android作为TCP客户端与开发板通讯
UDP_Client Android通过UDP协议与开发板通讯
PC(Visual Studio 2013 C++ MFC)工具源码
MQTT_调试助手 PC通过MQTT与开发板通讯
TCP 调试助手 PC通过TCP服务器/客户端与开发板通讯
UDP 调试助手 PC通过UDP与开发板通讯
LVGL源码
LVGL_Full_Test LVGL官方例程(使用到了大分部控件)
LVGL_Arc_Test 圆弧指示器通过触摸动态改变值
LVGL_Bar_Test 通过动画方式动态演示Bar进度条的使用方法
LVGL_Button_Test 通过5种不同动态效果的按钮学习按钮的创建与使用
LVGL_ButtonMatrix_Test 创建一个计算器布局来演示矩阵按钮控件的使用
LVGL_Calendar_Test 日历控件的创建和使用
LVGL_Canvas_Test 透明画布和画一个圆角过渡色矩形并旋转角度学习画布的使用
LVGL_Chart_Test 通过创建三个不同风格的图表来学习图表控件的使用
LVGL_Checkbox_Test 学习复选框控件的创建和使用
LVGL_ColorPicker_Test 创建一个颜色选择器并动态显示当前颜色的RGB值
LVGL_Container_Test 在内容控件上动态创建三个文本标签学习内容控件的自适应布局
LVGL_Drop_down_List_Test 创建三个不同类型的下拉选择控件
LVGL_Gauge_Test 创建一个动态仪表和静态多指针仪表
LVGL_Image_Test 通过四个滑动条控件控制图片颜色的变化来学习图像控件的使用
LVGL_ImageButton_Test 创建一个图片背景的图像按钮
LVGL_Keyboard_Test 通过一个文本输入框控件还学习键盘控件的调用关闭设置
LVGL_Label_Test 创建内容颜色可变,长文本滚动展示,带阴影3D效果三个标签控件
LVGL_LED_Test 创建三个LED,学习LED控件的调光,颜色,开关的设置
LVGL_Line_Test 通过二维数组创建一段折线来演示线控件的使用
LVGL_LineMeter_Test 创建两个不同的线段弧形指示器动态展示数据
LVGL_List_Test 创建一个带图标的列表控件
LVGL_MessageBox_Test 创建一个带按钮的消息框控件
LVGL_ObjectMask_Test 创建一个变幻色的文本学习蒙版遮罩效果
LVGL_Page_Test 学习页面控件的使用
LVGL_Roller_Test 通过示例学习滑动列表选择器控件
LVGL_Slider_Test 创建一个单向和一个双向滑动条控件
LVGL_Spinbox_Test 学习微调控件的使用
LVGL_Spinner_Test 创建三个不同的环形加载器
LVGL_Switch_Test 创建两个不同的开关控件
LVGL_Table_Test 创建一个简单的表格
LVGL_Tabview_Test 实现三页的页面切换学习Tabview控件
LVGL_Textarea_Test 长按实现打字机效果的Textarea控件
LVGL_Tileview_Test 实现四面环形触摸切换的Tileview控件
LVGL_Window_Test 创建一个窗口,带设置子窗口学习窗口控件的使用
编程第一课必写helloworld,因为 The C Programming Language 中使用它做为第一个演示程序,非常著名,所以后来的程序员在学习编程或进行设备调试时延续了这一习惯,入行久了才会明白,一入编程深似海,从此头发是路人,先不要和世界问好了,以后陪伴你更多的是Bug。
第一个示例先向Bug问好
printf:一个ISR(中断服务处理,Interrupt Service Routines)应该避免调用不可重入函数。一些标准库函数是不可重入的,如经常实现的malloc和printf。因为中断可能发生在执行任务中,因为任务可能是在“malloc”的函数调用中,如果ISR调用此相同的不可重入函数,由此产生的行为可能是灾难性的。
不可重入函数是指这样的一类函数,不可以在它还没有返回就再次被调用。例如printf,malloc,free等都是不可重入函数。因为信号可能在任何时候发生,例如在printf执行过程中,因此不能在信号处理函数里调用printf,否则printf将会被重入。 函数不可重入大多数是因为在函数中引用了全局变量。
例如,printf会引用全局变量stdout,malloc,free会引用全局的内存分配表。
不建议在 ISR 中使用 printf 和其余输出函数。出于调试的目的,可以在ISR 中使用 ESP_EARLY_LOGx 来输出日志,不过要确保将 TAG 和格式字符串都放在了DRAM 中。
日志库有两种管理日志详细程度的方法:编译阶段,通过菜单设置;运行阶段,使用esp_log_level_set()函数设置。
日志等级有:错误,警告,信息,调试和详细(详细度从最低到最高)
考虑到线程安全,在FREERTOS中尽量使用ESP_LOGX来输出调试信息和打印消息
代码:
// Hello Bug Example
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include <esp_log.h>
const static char *TAG = "HelloBug Demo";
void app_main()
{
uint8_t MAC[6];
ESP_LOGI(TAG, "Hello Bug");
// 打印芯片信息
esp_chip_info_t chip_info;
esp_chip_info(&chip_info);
ESP_LOGI(TAG, "ESP32 Chip Cores Count: %d",chip_info.cores);
if(chip_info.model == 1){
ESP_LOGI(TAG, "ESP32 Chip Model is: ESP32");
}else if(chip_info.model == 2){
ESP_LOGI(TAG, "ESP32 Chip Model is: ESP32S2");
}else{
ESP_LOGI(TAG, "ESP32 Chip Model is: Unknown Model");
}
ESP_LOGI(TAG, "ESP32 Chip Features is: %d",chip_info.features);
ESP_LOGI(TAG, "ESP32 Chip Revision is: %d",chip_info.revision);
ESP_LOGI(TAG, "ESP32 Chip, WiFi%s%s, ",
(chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");
ESP_LOGI(TAG, "SPI Flash Chip Size: %dMByte %s flash", spi_flash_get_chip_size() / (1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "Embedded" : "External");
ESP_LOGI(TAG, "Free Heap Size is: %d Byte",esp_get_free_heap_size());
ESP_LOGI(TAG, "Free Internal Heap Size is: %d Byte",esp_get_free_internal_heap_size());
ESP_LOGI(TAG, "Free minimum Heap Size is: %d Byte",esp_get_minimum_free_heap_size());
esp_base_mac_addr_get(MAC);
ESP_LOGI(TAG, "Base MAC Addr : %02X.%02X.%02X.%02X.%02X.%02X",MAC[0],MAC[1],MAC[2],MAC[3],MAC[4],MAC[5]);
for (int i = 10; i >= 0; i--) {
ESP_LOGI(TAG, "Hello Bug! ^_^ %d", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
while(1){
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
//ESP_LOGI(TAG, "Restarting now.");
//fflush(stdout);
//esp_restart();
}
示例完整串口输出:
ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:4
load:0x3fff0034,len:7144
load:0x40078000,len:13696
ho 0 tail 12 room 4
load:0x40080400,len:4000
entry 0x40080688
I (31) boot: ESP-IDF v4.2-dev-1995-g636b964c8-dirty 2nd stage bootloader
I (31) boot: compile time 22:38:56
I (32) boot: chip revision: 3
I (36) boot_comm: chip revision: 3, min. bootloader chip revision: 0
I (43) boot.esp32: SPI Speed : 40MHz
I (48) boot.esp32: SPI Mode : DIO
I (52) boot.esp32: SPI Flash Size : 4MB
I (57) boot: Enabling RNG early entropy source...
I (62) boot: Partition Table:
I (66) boot: ## Label Usage Type ST Offset Length
I (73) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (81) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (88) boot: 2 factory factory app 00 00 00010000 00100000
I (96) boot: End of partition table
I (100) boot_comm: chip revision: 3, min. application chip revision: 0
I (107) esp_image: segment 0: paddr=0x00010020 vaddr=0x3f400020 size=0x05d40 ( 23872) map
I (125) esp_image: segment 1: paddr=0x00015d68 vaddr=0x3ffb0000 size=0x021c4 ( 8644) load
I (129) esp_image: segment 2: paddr=0x00017f34 vaddr=0x40080000 size=0x00404 ( 1028) load
I (134) esp_image: segment 3: paddr=0x00018340 vaddr=0x40080404 size=0x07cd8 ( 31960) load
I (156) esp_image: segment 4: paddr=0x00020020 vaddr=0x400d0020 size=0x1304c ( 77900) map
I (186) esp_image: segment 5: paddr=0x00033074 vaddr=0x400880dc size=0x01e50 ( 7760) load
I (196) boot: Loaded app from partition at offset 0x10000
I (196) boot: Disabling RNG early entropy source...
I (198) cpu_start: Pro cpu up.
I (202) cpu_start: Application information:
I (207) cpu_start: Project name: hello-bug
I (212) cpu_start: App version: 1
I (216) cpu_start: Compile time: Sep 2 2020 22:38:37
I (222) cpu_start: ELF file SHA256: 5eb98a9eca0e63a6...
I (228) cpu_start: ESP-IDF: v4.2-dev-1995-g636b964c8-dirty
I (235) cpu_start: Starting app cpu, entry point is 0x400815c4
I (0) cpu_start: App cpu up.
I (246) heap_init: Initializing. RAM available for dynamic allocation:
I (252) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (258) heap_init: At 3FFB2A00 len 0002D600 (181 KiB): DRAM
I (265) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (271) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (277) heap_init: At 40089F2C len 000160D4 (88 KiB): IRAM
I (284) cpu_start: Pro cpu start user code
flash id ==== 0x204016
I (302) spi_flash: detected chip: generic
I (303) spi_flash: flash io: dio
I (303) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (313) HelloBug Demo: Hello Bug
I (313) HelloBug Demo: ESP32 Chip Cores Count: 2
I (323) HelloBug Demo: ESP32 Chip Model is: ESP32
I (323) HelloBug Demo: ESP32 Chip Features is: 50
I (333) HelloBug Demo: ESP32 Chip Revision is: 3
I (343) HelloBug Demo: ESP32 Chip, WiFi/BT/BLE,
I (343) HelloBug Demo: SPI Flash Chip Size: 4MByte External flash
I (353) HelloBug Demo: Free Heap Size is: 299588 Byte
I (353) HelloBug Demo: Free Internal Heap Size is: 299588 Byte
I (363) HelloBug Demo: Free minimum Heap Size is: 298768 Byte
I (373) system_api: Base MAC address is not set
I (373) HelloBug Demo: Base MAC Addr : DC.45.08.80.70.48
I (383) HelloBug Demo: Hello Bug! ^_^ 10
I (1383) HelloBug Demo: Hello Bug! ^_^ 9
I (2383) HelloBug Demo: Hello Bug! ^_^ 8
I (3383) HelloBug Demo: Hello Bug! ^_^ 7
I (4383) HelloBug Demo: Hello Bug! ^_^ 6
I (5383) HelloBug Demo: Hello Bug! ^_^ 5
I (6383) HelloBug Demo: Hello Bug! ^_^ 4
I (7383) HelloBug Demo: Hello Bug! ^_^ 3
I (8383) HelloBug Demo: Hello Bug! ^_^ 2
I (9383) HelloBug Demo: Hello Bug! ^_^ 1
I (10383) HelloBug Demo: Hello Bug! ^_^ 0