ESP32-S3 LVGL http下载B站头像 JPG显示

2023-05-16

最近在用ESP32S3获取B站JPG头像进行显示。记录一下,开发板链接:

ESP32-S3 LVGL 开发板 人工智能语音识别 人脸识别 触摸 音频-淘宝网 (taobao.com)

直接上代码:

第一种下载方式:

/*

	获取B站头像JPG文件buffer
*/
static esp_err_t face_http_event_handler(esp_http_client_event_t *evt)
{
	static char *output_buffer; // Buffer to store response of http request from event handler
	static int output_len;		// Stores number of bytes read

	switch (evt->event_id)
	{
	case HTTP_EVENT_ERROR:
		ESP_LOGI(TAG, "HTTP_EVENT_ERROR");
		break;
	case HTTP_EVENT_ON_CONNECTED:
		ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED");
		break;
	case HTTP_EVENT_HEADER_SENT:
		ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT");
		break;
	case HTTP_EVENT_ON_HEADER:
		ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
		break;
	case HTTP_EVENT_ON_DATA:
		printf("HTTP_EVENT_ON_DATA, len=%d\n", evt->data_len);

		//如果404或者502
		// if (evt->data_len == 150 || evt->data_len == 146)
		// 	return ESP_OK;

		// printf("%.*s\n", evt->data_len, (char *)evt->data);
		// if (!esp_http_client_is_chunked_response(evt->client)) {
		//         // Write out data
		//         printf("%.*s", evt->data_len, (char*)evt->data);
		//     }
		if (!esp_http_client_is_chunked_response(evt->client))
		{
			//ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA  !esp_http_client_is_chunked_response");
			// If user_data buffer is configured, copy the response into the buffer
			if (face_buffer) /*如果已经申请了内存 就直接复制接收到的数据*/
			{

				memcpy(face_buffer + output_len, evt->data, evt->data_len);
			}
			else /*如果没有申请*/
			{
				if (face_buffer == NULL) /*申请一个http长度的内存来保存数据*/
				{
					face_buffer = (char *)malloc(esp_http_client_get_content_length(evt->client));
					output_len = 0;
					if (face_buffer == NULL)
					{
						ESP_LOGE(TAG, "Failed to allocate memory for output buffer");
						return ESP_FAIL;
					}
				}
				memcpy(face_buffer + output_len, evt->data, evt->data_len); //拷贝数据
			}

			output_len += evt->data_len; //记录下载进度
		}

		break;
	case HTTP_EVENT_ON_FINISH:
		ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH");
		break;
	case HTTP_EVENT_DISCONNECTED:
		ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");

		break;
	}
	return ESP_OK;
}
void get_face_jpg(char *bili_uid)
{

	static esp_http_client_config_t config = {
		.url = "https://whycan.com/files/members/4115/11111.png",//这里是你的B站头像链接
		.event_handler = face_http_event_handler,
		.buffer_size = 3 * 1024,
		.timeout_ms = 4000,
		.path = "/get",
		.transport_type = HTTP_TRANSPORT_OVER_TCP,
	};
	esp_http_client_handle_t client = esp_http_client_init(&config);
	esp_http_client_set_header(client, "Accept", "*/*");
	esp_http_client_set_header(client, "Accept-Encoding", "identity");
	esp_http_client_set_header(client, "User-Agent", "PostmanRuntime/7.24.1");
	esp_http_client_set_header(client, "Connection", "keep-alive");
	esp_http_client_set_header(client, "Content-Type", "application/json");
	// esp_err_t err = esp_http_client_open(client, 0);
	esp_err_t err = esp_http_client_perform(client);
	if (err == ESP_OK)
	{
		ESP_LOGE(TAG, "HTTP GET Status = %d, content_length = %d",
				 esp_http_client_get_status_code(client),
				 esp_http_client_get_content_length(client));
	}
	else
	{
		ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));
	}

	esp_http_client_cleanup(client);
}

以上方式是获取一个固定链接的图片存到face_buffer 这个char*里,下一种是先根据B站id来获取头像图片的url,再根据url来获取图片。

B站个人信息API接口:https://api.bilibili.com/x/space/acc/info?mid=59041601

在浏览器里输入以上链接可以看到:

{"code":0,"message":"0","ttl":1,"data":{"mid":59041601,"name":"Kevincoooool","sex":"男","face":"http://i2.hdslb.com/bfs/face/bce14f5e3af4bca480fc7de227986ba304507078.jpg","face_nft":0,"sign":"Jlink DAP OpenMV 淘宝店铺:酷世DIY","rank":10000,"level":5,"jointime":0,"moral":0,"silence":0,"coins":1249,"fans_badge":true,"fans_medal":{"show":true,"wear":false,"medal":null},"official":{"role":0,"title":"","desc":"","type":-1},"vip":{"type":0,"status":0,"due_date":0,"vip_pay_type":0,"theme_type":0,"label":{"path":"","text":"","label_theme":"","text_color":"","bg_style":0,"bg_color":"","border_color":""},"avatar_subscript":0,"nickname_color":"","role":0,"avatar_subscript_url":""},"pendant":{"pid":0,"name":"","image":"","expire":0,"image_enhance":"","image_enhance_frame":""},"nameplate":{"nid":10,"name":"见习偶像","image":"http://i0.hdslb.com/bfs/face/e93dd9edfa7b9e18bf46fd8d71862327a2350923.png","image_small":"http://i2.hdslb.com/bfs/face/275b468b043ec246737ab8580a2075bee0b1263b.png","level":"普通勋章","condition":"所有自制视频总播放数\u003e=10万"},"user_honour_info":{"mid":0,"colour":null,"tags":[]},"is_followed":false,"top_photo":"http://i0.hdslb.com/bfs/space/cb1c3ef50e22b6096fde67febe863494caefebad.png","theme":{},"sys_notice":{},"live_room":{"roomStatus":1,"liveStatus":0,"url":"https://live.bilibili.com/2153512","title":"啥呀这是","cover":"http://i0.hdslb.com/bfs/live/user_cover/20e11be91ed85436a8800dafb3d3550736cb1899.jpg","online":0,"roomid":2153512,"roundStatus":0,"broadcast_type":0},"birthday":"03-08","school":{"name":"成都信息工程大学"},"profession":{"name":""},"tags":null,"series":{"user_upgrade_status":3,"show_upgrade_window":false}}}

其中 "face":"http://i2.hdslb.com/bfs/face/bce14f5e3af4bca480fc7de227986ba304507078.jpg" 就是我们的头像图片链接,再把这个链接放到以上方式的url中即可。

上代码:

esp_err_t cjson_face(char *text)
{
	cJSON *root_ksdiy, *psub_ksdiy;
	char *index = strchr(text, '{');
	printf("face json:%s\n", text);
	if (index == NULL)
	{
		return ESP_FAIL;
	}
	else
	{
		strcpy(text, index);
		root_ksdiy = cJSON_Parse(text);
		if (root_ksdiy != NULL)
		{
			psub_ksdiy = cJSON_GetObjectItem(root_ksdiy, "data");
			if (psub_ksdiy != NULL)
			{
				cJSON *name = cJSON_GetObjectItem(psub_ksdiy, "name");
				wp_fans.name = name->valuestring;
				cJSON *face_url = cJSON_GetObjectItem(psub_ksdiy, "face");
				wp_fans.face_url = face_url->valuestring;
				ESP_LOGI(TAG, "获取头像URL成功 name:%s  face_url:%s\n", wp_fans.name, wp_fans.face_url);
				memset((char *)url_buff, 0, 256);
				sprintf(url_buff, "%s", face_url->valuestring);
				_get_face_url = true;
			}
			else
			{
				_get_face_url = false;
				ESP_LOGI(TAG, "获取头像URL,请检查uid");
			}
		}
		else
		{
			return ESP_FAIL;
		}
		cJSON_Delete(root_ksdiy);
	}
	return ESP_OK;
}
static esp_err_t bilibili_face_http_event_handler(esp_http_client_event_t *evt)
{

	switch (evt->event_id)
	{
	case HTTP_EVENT_ERROR:
		ESP_LOGI(TAG, "HTTP_EVENT_ERROR");
		break;
	case HTTP_EVENT_ON_CONNECTED:
		ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED");
		break;
	case HTTP_EVENT_HEADER_SENT:
		ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT");
		break;
	case HTTP_EVENT_ON_HEADER:
		ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
		break;
	case HTTP_EVENT_ON_DATA:
		printf("HTTP_EVENT_ON_DATA, len=%d\n", evt->data_len);

		//如果404或者502
		if (evt->data_len == 150 || evt->data_len == 146)
			return ESP_OK;

		// printf("%.*s\n", evt->data_len, (char *)evt->data);
		cjson_face((char *)evt->data);

		break;
	case HTTP_EVENT_ON_FINISH:
		ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH");
		break;
	case HTTP_EVENT_DISCONNECTED:
		ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");

		break;
	}
	return ESP_OK;
}
void get_face_url(char *bili_uid)
{

	static char post_url[256] = {0};
	memset((char *)post_url, 0, 256);
	static esp_http_client_config_t config = {
		// .url = "https://api.bilibili.com/x/relation/stat?vmid=59041601&jsonp=jsonp",
		.event_handler = bilibili_face_http_event_handler,
		.buffer_size = 3 * 1024,
		.timeout_ms = 4000,
		.path = "/get",
		.transport_type = HTTP_TRANSPORT_OVER_TCP,
	};
	sprintf(post_url, "https://api.bilibili.com/x/space/acc/info?mid=%s", bili_uid);
	config.url = post_url;
	esp_http_client_handle_t client = esp_http_client_init(&config);
	esp_http_client_set_header(client, "Accept", "*/*");
	esp_http_client_set_header(client, "Accept-Encoding", "identity");
	esp_http_client_set_header(client, "User-Agent", "PostmanRuntime/7.24.1");
	esp_http_client_set_header(client, "Connection", "keep-alive");
	esp_http_client_set_header(client, "Content-Type", "application/json");

	esp_err_t err = esp_http_client_perform(client);
	if (err == ESP_OK)
	{
		ESP_LOGE(TAG, "HTTP GET Status = %d, content_length = %d",
				 esp_http_client_get_status_code(client),
				 esp_http_client_get_content_length(client));
	}
	else
	{
		ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err));
	}

	esp_http_client_cleanup(client);
}

最后,获取了B站的头像buffer,我们还要显示出来,在这里要使用到lvgl的split jpg库并对库做一些修改,因为原来的库是不会缩放jpg的,我们得到的头像buffer一般比较大,显示出来整个屏幕都没了,所以需要缩小,

 

.H文件中增加以下define:

/*********************
 *      DEFINES
 *********************/

/* Scaling factor */
// #define LV_TJPGD_CONFIG_SCALING_FACTOR_NONE
//#define LV_TJPGD_CONFIG_SCALING_FACTOR_1_2
#define LV_TJPGD_CONFIG_SCALING_FACTOR_1_4
//#define LV_TJPGD_CONFIG_SCALING_FACTOR_1_8

/* When setting scaling factor to none we should set JD_USE_SCALE to 0
 * set it to 1 otherwise */
#if defined (LV_TJPGD_CONFIG_SCALING_FACTOR_NONE)
    #define LV_TJPGD_SCALING_FACTOR     0
    #define LV_TJPGD_SCALING_FACTOR_DIV 1
#elif defined (LV_TJPGD_CONFIG_SCALING_FACTOR_1_2)
    #define LV_TJPGD_SCALING_FACTOR     1
    #define LV_TJPGD_SCALING_FACTOR_DIV 2
#elif defined (LV_TJPGD_CONFIG_SCALING_FACTOR_1_4)
    #define LV_TJPGD_SCALING_FACTOR     2
    #define LV_TJPGD_SCALING_FACTOR_DIV 4
#elif defined (LV_TJPGD_CONFIG_SCALING_FACTOR_1_8)
    #define LV_TJPGD_SCALING_FACTOR     3
    #define LV_TJPGD_SCALING_FACTOR_DIV 8
#else
    #error "Invalid TJPGD scaling factor configuration"
#endif // defined

 最后显示:

   
lv_img_dsc_t bili_face = {
    .header.always_zero = 0,
    .header.w = 300,
    .header.h = 300,
    .data_size = 300 * 300 * 2,
    .header.cf = LV_IMG_CF_RAW,
    .data = NULL,
};


    img_face = lv_img_create(scr_body, NULL);
    lv_obj_add_style(img_face, LV_IMG_PART_MAIN, &style_img);
    lv_obj_set_pos(img_face, APP_WIN_WIDTH / 2 - 40, 70);


    bili_face.data = (uint8_t *)face_buffer;//把在线获取的buffer给img

    lv_img_set_src(img_face, &bili_face);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32-S3 LVGL http下载B站头像 JPG显示 的相关文章

  • 毫米波雷达的硬件架构与射频前端

    说明 本篇博文梳理 车载 毫米波雷达的系统构成 xff0c 特别地 xff0c 对其射频前端各部件做细节性的原理说明 本篇博文会基于对这方面知识理解的加深以及读者的反馈长期更新内容和所附资料 xff0c 有不当之处或有其它有益的参考资料可以
  • 串口+DMA 数据收发编程实践

    更多交流欢迎关注作者抖音号 xff1a 81849645041 目标 了解DMA 的工作原理 xff0c 通过配置 STM32F407 芯片的DMA xff0c 实现串口 43 DMA数据收发 原理 基于USART的数据通讯中采用中断方式可
  • W25Q128读写实验

    更多交流欢迎关注作者抖音号 xff1a 81849645041 目的 熟悉W25Q128串行FLASH的特性和操作指令 掌握通过SPI通讯读写W25Q128数据 原理 本章是结合SPI通讯对串行FLASH的读写 xff0c 通过SPI发送指
  • TFTLCD屏幕实验

    更多交流欢迎关注作者抖音号 xff1a 81849645041 目的 了解TFTLCD屏幕和FSMC的驱动原理 xff0c 通过STM32F4的FSMC接口来控制TFTLCD的显示 原理 1 液晶显示器 显示器属于计算机的I O设备 xff
  • STM32F4主板硬件设计与接口

    更多交流欢迎关注作者抖音号 xff1a 81849645041 本专栏的所有程序都在飞航科技 STM32 F407 开发板上测试通过 xff0c 本文介绍一下STM32 F407 开发板硬件设计与接口 xff0c 便于读者学习交流 STM3
  • 基于STM32F0实现人体红外传感器

    目的 了解人体红外传感器 HC SR501 的驱动原理和STM32F030的中断机制 xff0c 通过配置 STM32F030 芯片 GPIO 相关寄存器和外部触发中断实现人体红外传感器检测人体 原理 中断是指当CPU执行程序时 xff0c
  • STM32F0底板硬件架构设计与原理

    STM32F0底板接口明细 xff1a STM32F0底板作为整块节点的核心 xff08 如下图所示 xff09 xff0c 因此其接口相对应来说较多 xff0c 具体的接口有 xff1a 1 xff1a 5V电源输入口 xff0c STM
  • 基于STM32F030驱动SHT10温湿度传感器

    目的 了解温湿度传感器SHT10的驱动原理 xff0c 通过配置 STM32F030 的GPIO来采集温湿度传感器的温度 湿度和露点的 值 原理 SHT1x 包括 SHT10 SHT11 和 SHT15 属于Sensirion温湿度传感器家
  • Mysql整体介绍(适用于5.X版本)(下)(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 Mysql整体介绍 xff08 适用于5 X版本 xff09 下 xff09 xff0
  • 基于STM32F030实现RFID射频识别

    目的 了解MFRC522读写卡芯片和S50非接触IC卡的驱动原理 xff0c 通过配置 STM32F030 的GPIO和外设SPI xff0c 完成MFRC522传感器与卡的数据读写以及扣款充值实验 原理 MFRC522是高度集成的非接触式
  • MCS-51单片机学习之路(1)

    简介 单片机即单片机微型单片机 xff0c 是将单片机主机 CPU 内存和I O接口 集成在一小块硅片上的微型机 单片机又称微控制器 MCU 单片机具有三高优势 集成度高 可靠性高 性价比高 单片机的历史 第一阶段 xff0c 初级单片 机
  • 【Linux C语言查看SD卡大小】

    1 说明 在linux 环境下 xff0c 使用C预言获取SD卡容量信息 2 环境说明 硬件环境 xff1a ARM或者其他任意开发板 软件环境 xff1a Linux 任意版本 3 原理 statfs 函数 xff0c 可以获取磁盘的容量
  • shell 脚本实现的 deamon 守护进程

    1 说明 在linux 环境下 xff0c 使用 shell 脚本编写一个守护进程 xff0c 在后台一直运行 xff0c 监听需要守护的进程名称 xff0c 如app xff08 1 xff09 当检测到app进程停止 xff0c 则将其
  • mips uclibc 交叉编译ffmpeg,支持 G711A 编解码

    1 说明 使用 ffmpeg 源码 xff0c 进行交叉编译 xff0c 支持 H264 和 G711A 编码支持 2 环境说明 硬件环境 xff1a mips 架构芯片 软件环境 xff1a Linux 任意版本 3 原理 xff08 1
  • Linux下USB CDC ACM 驱动简析

    一 硬件平台 xff1a TI AM335X 芯片 二 软件平台 xff1a Ubuntu 10 04 三 USB CDC ACM 驱动简介 USB的CDC类是USB通信设备类 xff08 Communication Device Clas
  • Openwrt增加对 sd card 支持

    一 硬件平台 1 1 控制器 xff1a MT7620 xff08 A9内核 xff09 二 软件平台 2 1 开发环境 xff1a Ubuntu12 04 2 2 软件版本 xff1a openwrt 官方15 05版本SDK开发包 xf
  • linux sed命令删除特殊字符(含斜线、冒号等转义字符)

    简介 sed 是一种在线编辑器 xff0c 它一次处理一行内容 处理时 xff0c 把当前处理的行存储在临时缓冲区中 xff0c 称为 模式空间 xff08 pattern space xff09 接着用sed命令处理缓冲区中的内容 xff
  • makefile 中指定程序运行时加载的库文件路径

    1 问题描述 程序运行时 xff0c 提示找不到库 原因 xff1a 默认运行加载的库路径为 usr lib 2 解决方法 2 1 方法一 xff0c 设置PATH环境变量 如何在加入这些路径呢 xff1f 以PATH变量为例 一种方法是
  • Openwrt 新增平台编译

    1 说明 本文主要介绍 xff0c 如何在openwrt系统中 xff0c 新增一个平台进行编译 如原本的openwrt 包含了adm5120 arc770 ath25 imx6等平台 xff0c 现在需要新增一个sc9820平台的编译 本
  • Docker概述(一)(标贝科技)

    Docker概述 xff08 一 xff09 顺便介绍下 xff1a 我们是一家致力于智能语音交互的AI公司 xff0c 我们提供了语音识别 语音合成 声纹识别 声音复刻 声音转换等技术产品供小伙伴们测试调用 xff0c 感兴趣的 xff0

随机推荐

  • 树莓派网络配置

    1 说明 1 树莓派有线网络配置 1 树莓派系统WIFI 静态IP设置 2 树莓派系统DNS地址 etc resolv conf 开机后被还原为空或者192 168 1 1处理方法 2 环境 软件环境 xff1a 树莓派3 0 系统 硬件环
  • Linux 读写memory操作,devmem直接访问物理内存地址

    1 说明 由于开发需要 xff0c 需要通过memory传输数据 xff0c 所以使用devmem 方式读写数据 xff0c 操作linux 内存数据 devmem的方式是提供给驱动开发人员 xff0c 在应用层能够侦测内存地址中的数据变化
  • Open3D+vs配置以及使用教程

    Open3d 0 8 0 43 Cmake 43 vs2015 1 下载 简要看一下官网 xff1a Open3D Home Page Github主页 xff1a Open3D Github 注意下载版本 xff0c 一定要与vs相匹配
  • 彻底明白ip地址,区分localhost、127.0.0.1和0.0.0.0

    通俗的了解IP地址是什么 对于IP地址 xff0c 大家并不陌生 xff0c 特别是在网络访问中我们会经常使用到 xff08 平时对域名如百度的www baidu com的访问 xff0c 本质就是对域名所绑定的IP地址的访问 xff09
  • C3927 “->“: 非函数声明符后不允许尾随返回类型等错误

    C3927 34 gt 34 非函数声明符后不允许尾随返回类型等错误 xff0c 如下所示 xff1a 解决方法 xff1a 在VS2015版本 Visual Studio 2015 Update 2 xff0c 增加一个编译选项 utf
  • c++ nan或inf

    nan xff1a not a number 非数字 注意事项 xff1a 对负数开方sqrt 1 0 对负数求对数 log 1 0 0 0 0 0 0 0 inf inf inf inf inf这些操作都会得到nan 0 0会产生操作异常
  • 膨胀、腐蚀、开、闭运算——数字图像处理中的形态学

    膨胀 腐蚀 开 闭运算是数学形态学最基本的变换 形态学通常用于二值图像 一 膨胀与腐蚀能够实现以下作用 xff1a 1 消除噪声 2 分割出独立的图像元素 xff0c 在图像中连接相邻的元素 3 寻找图像中的明显的极大值区域或者极小值区域
  • c语言中&与&&区别

    c语言中 amp 与 amp amp 的区别 amp xff1a 按照位与操作 xff0c 例如 xff1a 0010 amp 1101 xff0c 结果为0000 amp 是java中的位逻辑运算 xff1a eg xff1a 2 amp
  • 网格搜索法

    网格搜索法是指定参数值的一种穷举搜索方法 xff0c 通过将估计函数的参数通过交叉验证的方法进行优化来得到最优的学习算法 即 xff0c 将各个参数可能的取值进行排列组合 xff0c 列出所有可能的组合结果生成 网格 然后将各组合用于SVM
  • pytorch模型从训练到LibTorch部署(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 1 pytorch和libtorch安装 标贝科技 PyTorch 是Torch7 团
  • C++Debug Assertion Failed!到底出错在哪里?

    总结来说这种错误存在两种情况 xff0c 其一就是野指针 另一种情况就是内存泄露 在调试的时候一定是在自己编写的函数上找错 xff0c 不要一只跟着调试顺序在库函数里找错 注意事项 单步调试找到错误 xff0c 祝好运 以上为百度出来的结果
  • 截止频率概念

    截止频率 fc xff08 1HZ 100HZ xff09 xff0c 代表什么意思 截止频率fc xff0c 用来描述一个滤波器或一个放大器频率特性的指标 一个滤波器或一个放大器 xff0c 当保持输入信号的幅度不变 xff0c 改变信号
  • C语言中EOF什么意思

    在C语言中 xff0c 或更精确地说成C标准函数库中表示文件结束符 xff08 end of file xff09 在while循环中以EOF作为文件结束标志 xff0c 这种以EOF作为文件结束标志的文件 xff0c 必须是文本文件 在文
  • C++里面的LPBYTE是什么意思

    BYTE 为 unsigned char LPBYTE 为 unsigned char
  • ORACLE 字符串聚合函数 strCat

    create or replace type strcat type as object currentstr varchar2 4000 currentseprator varchar2 8 static function ODCIAgg
  • 1.unity3d Astar pathfinding 第一个例子

    1 场景准备 先建立一个scene 添加一个plane xff0c 让其坐标处于 0 0 0 xff0c 并三方向scale都为10 添加一个新的layer xff0c 命名为Ground xff0c 并将上面建立的plane设置为Grou
  • [STM32]开源多功能DAP 脱机烧录器 DAPLink仿真下载器

    网上已经有很多开源脱机烧录器的了 xff0c XVIN1987的很小巧 xff0c 很有参考价值 xff0c 志明的很庞大 xff0c 源码较多较复杂 xff0c 于是自己在无线DAP的基础上 xff0c 添加了脱机烧录功能 xff0c u
  • 全志V3S 入门 RTL8723BS 连接wifi

    开发板 xff1a 荔枝派zero linux xff1a 5 10 rootfs xff1a buildroot 2017 8 1 使用最新的主线linux内核5 10 xff0c 主线5 10内核linux make ARCH 61 a
  • ESP32蓝牙 华为手机容易断连解决

    在长达两年的售后中 xff0c 收到华为手机连接ESP32蓝牙是最容易断开连接的 xff0c 一开始小米手机 苹果手机都没问题 xff0c 就只有华为 xff0c 一连上就断开 xff0c 所以我们认为是APP问题 xff0c 于是我们去找
  • ESP32-S3 LVGL http下载B站头像 JPG显示

    最近在用ESP32S3获取B站JPG头像进行显示 记录一下 xff0c 开发板链接 xff1a ESP32 S3 LVGL 开发板 人工智能语音识别 人脸识别 触摸 音频 淘宝网 taobao com 直接上代码 xff1a 第一种下载方式