当前位置: 首页 > news >正文

coding搭建WordPress吴忠seo

coding搭建WordPress,吴忠seo,最新外贸seo,福州 网站制作 外贸0. 本人使用环境介绍 0.1 硬件环境 ESP32-C3FPM383C指纹模块一根破旧的usb数据线 0.2 软件环境 Clion2024.2.2ESP-IDF5.3.1Clion插件ESP-IDF 1. 硬件接口说明 1.1 UART UART 缺省波特率为 57.6Kbps,数据格式:8 位数据位,2 位停止位&am…

0. 本人使用环境介绍

0.1 硬件环境

  • ESP32-C3
  • FPM383C指纹模块
  • 一根破旧的usb数据线

0.2 软件环境

  • Clion2024.2.2
  • ESP-IDF5.3.1
  • Clion插件ESP-IDF

1. 硬件接口说明

1.1  UART

  •  UART 缺省波特率为 57.6Kbps,数据格式:8 位数据位,2 位停止位,无校验位;

  • UART 波特率可以通过指令进行设置,范围从 9600 至 115200;

  • 如果主控是 MCU(3.3V),则直接与 UART_TD 和 UART_RD 连接;如果主控是 PC,则需要挂接RS232 电平转换设备。

1.2  USB

  • 标准 USB 接口,内嵌 USB 通讯协议;

  • 兼容 USB2.0,工作在 Full Speed;

  • 默认 VID=0x2109;默认 PID=0x7638;

1.3 UART 与 USB 协同工作

  • 主控即可通过 UART 或 USB 与指纹模组通讯;

  • 两个接口只能单独工作,不支持同时工作;

  • 两个接口执行相同的协议和命令;

  • 两个接口共享同一个数据缓冲区;

2. 业务类指令集

2.1 通用指令集

2.1.1 验证用获取图像PS_GetImage

2.1.1 代码实现


/*** 从指纹传感器获取图像** 该函数通过UART向指纹传感器发送指令,请求获取当前图像,并接收传感器的响应* 根据响应中的状态码判断图像获取是否成功,以及图像质量是否符合要求** @return uint8_t 返回状态码:*         - 0: 获取图像成功*         - 1: 图像不清晰,请重新采集*         - 2: 获取图像失败或其他错误*/uint8_t Finger_GetImage() {// 准备发送给指纹传感器的数据包uint8_t sent_data[13] = {0xEF, 0x01,             // 包头0xFF, 0xFF, 0xFF, 0xFF, // 默认设备地址0x01,                   // 包标识0x00, 0x03,             // 包长度0x01,                   // 指令码0x00,                   // 参数0x00, 0x5              // 校验和};// 通过UART发送数据包uart_write_bytes(UART_NUM_0, sent_data, 13);// 准备接收指纹传感器的响应数据uint8_t get_data[64];// 读取UART接收到的数据,等待最多100msint st = uart_read_bytes(UART_NUM_0, get_data, 64, 100 / portTICK_PERIOD_MS);// 检查读取状态if (st >= 0) {// 根据响应数据中的状态码判断图像获取结果if (get_data[6] == 0x07 && get_data[10] == 0x00) {printf("获取图像成功\r\n");return 0;} else if (get_data[6] == 0x07 && get_data[10] == 0x01) {printf("图像不清晰,请重新采集\r\n");return 1;}}// 如果读取失败或响应数据不符合预期,则返回错误码return 2;
}

2.1.2 生成特征PS_GenChar

2.1.2 代码实现


/*** 生成指纹特征** 本函数通过UART向指纹模块发送指令,生成指纹特征** @param buffer 指纹数据缓冲区* @return uint8_t*         - 0: 特征生成成功*         - 1: 特征生成失败*         - 2: UART读写错误*/
uint8_t Finger_GenChar(uint8_t buffer) {// 构造发送数据包uint8_t sent_data[13] = {0xEF, 0x01,             // 包头0xFF, 0xFF, 0xFF, 0xFF, // 默认设备地址0x01,                   // 包标识0x00, 0x04,             // 包长度0x02,                   // 指令码'\0',                   // 参数'\0', '\0'              // 校验和};// 将缓冲区数据放入发送数据包中sent_data[10] = buffer;// 计算校验和uint16_t sum = sent_data[6] + sent_data[7] + sent_data[8] + sent_data[9] + sent_data[10];// 将校验和放入发送数据包中sent_data[11] = sum >> 8;sent_data[12] = sum;// 通过UART发送数据包uart_write_bytes(UART_NUM_0, sent_data, 13);// 接收指纹模块返回的数据uint8_t get_data[64];int st = uart_read_bytes(UART_NUM_0, get_data, 64, 100 / portTICK_PERIOD_MS);// 根据返回数据判断特征生成结果if (st >= 0) {if (get_data[6] == 0x07 && get_data[10] == 0x00) {printf("生成特征成功\r\n");return 0;} else if (get_data[6] == 0x07 && get_data[10] == 0x01) {printf("生成特征失败\r\n");return 1;}}// 如果读写错误,返回2return 2;
}

2.1.3 搜索指纹PS_Search

2.1.3 代码实现

/*** 搜索指纹指令* * 本函数通过UART向指纹模块发送搜索指令,并接收搜索结果* 搜索指令是一个固定格式的字节序列,通过UART发送给指纹模块* 接收到的数据显示搜索结果,包括成功、收包错误或搜索失败* * @return uint8_t 返回0表示搜索成功,返回1表示搜索失败或通信错误*/
uint8_t FINGER_Search(void)
{// 搜索指纹的指令序列,包含必要的指令码和参数uint8_t command[17]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x08,0x04,0x01,0x00,0x00,0xFF,0xFF,0x02,0x0C};// 通过UART发送搜索指令uart_write_bytes(UART_NUM_1,command,17);// 接收指纹模块返回的数据uint8_t recv_data[64]={0};int len=uart_read_bytes(UART_NUM_1,recv_data,64,500/portTICK_PERIOD_MS);// 检查接收到的数据长度if(len>0){// 根据接收数据的内容判断搜索结果if(recv_data[6]==0x07 && recv_data[9]==0x00){printf("搜索成功\r\n");return 0;}else if(recv_data[6]==0x07 && recv_data[9]==0x01){printf("收包错误\r\n");}else if(recv_data[6]==0x07 && recv_data[9]==0x09){printf("搜索失败\r\n");}}// 如果没有接收到数据或接收到的数据不匹配任何条件,则返回1return 1;
}

2.1.4 合并特征 PS_RegModel

2.1.4 代码实现

/*** 注册指纹模型** 本函数通过串口发送指令以注册指纹模型,并根据返回结果判断注册是否成功** @return uint8_t 返回注册状态码:*         0 - 合并成功*         1 - 收包错误*         2 - 合并失败*         3 - 通信失败或其他错误*/
uint8_t Finger_RegModel() {// 准备发送的数据包,包含包头、设备地址、包标识、包长度、指令码、参数和校验和uint8_t sent_data[13] = {0xEF, 0x01,             // 包头0xFF, 0xFF, 0xFF, 0xFF, // 默认设备地址0x01,                   // 包标识0x00, 0x03,             // 包长度0x05,                   // 指令码0x00,                   // 参数0x00, 0x09              // 校验和};// 通过UART发送数据包uart_write_bytes(UART_NUM_0, sent_data, 13);// 准备接收数据缓冲区uint8_t get_data[64];// 通过UART读取返回数据,设置超时时间为100msint st = uart_read_bytes(UART_NUM_0, get_data, 64, 100 / portTICK_PERIOD_MS);// 检查读取状态if (st >= 0) {// 根据返回数据判断注册结果if (get_data[6] == 0x07 && get_data[10] == 0x00) {printf("合并成功\r\n");return 0;} else if (get_data[6] == 0x07 && get_data[10] == 0x01) {printf("收包错误\r\n");return 1;} else if (get_data[6] == 0x07 && get_data[10] == 0x01) {printf("合并失败\r\n");return 2;}}// 如果通信失败或其他错误,返回3return 3;
}

2.1.5 储存模板PS_StoreChar

2.1.5 代码实现


/*** 函数: Finger_StoreChar** 描述: 将一个字符的数据存储到指定的页面ID中。** 参数:* - buffer: 要存储的字符数据。* - pageID: 目标页面的ID。** 返回值:* - 0: 存储成功。* - 1: 收包错误。* - 2: 超出指纹库范围。* - 3: 通信失败或其他错误。*/
uint8_t Finger_StoreChar(uint8_t buffer, uint16_t pageID) {// 构造要发送的数据包uint8_t sent_data[15] = {0xEF, 0x01,             // 包头0xFF, 0xFF, 0xFF, 0xFF, // 默认设备地址0x01,                   // 包标识0x00, 0x03,             // 包长度0x06,                   // 指令码'\0',                   // 缓冲区'\0', '\0',                   //位置号'\0', '\0'             // 校验和};// 将要存储的字符数据放入数据包中sent_data[10] = buffer;// 计算数据包的校验和uint16_t sum =sent_data[6] + sent_data[7] + sent_data[8] + sent_data[9] + sent_data[10] + sent_data[11] + sent_data[12];sent_data[11] = pageID >> 8;sent_data[12] = pageID;sent_data[13] = sum >> 8;sent_data[14] = sum;// 通过UART发送数据包uart_write_bytes(UART_NUM_0, sent_data, 15);// 接收响应数据uint8_t get_data[64];int st = uart_read_bytes(UART_NUM_0, get_data, 64, 100 / portTICK_PERIOD_MS);// 根据响应数据判断存储结果if (st >= 0) {if (get_data[6] == 0x07 && get_data[10] == 0x00) {printf("储存成功\r\n");return 0;} else if (get_data[6] == 0x07 && get_data[10] == 0x01) {printf("收包错误\r\n");return 1;} else if (get_data[6] == 0x07 && get_data[10] == 0x01) {printf("超出指纹库范围\r\n");return 2;}}return 3;
}

2.1.6 搜索指纹PS_Search

2.1.6 代码实现


/*** 搜索指纹指令** 本函数通过UART向指纹模块发送搜索指令,并接收搜索结果* 搜索指令是一个固定格式的字节序列,通过UART发送给指纹模块* 接收到的数据显示搜索结果,包括成功、收包错误或搜索失败** @return uint8_t 返回0表示搜索成功,返回1表示搜索失败或通信错误*/
uint8_t FINGER_Search(void)
{// 搜索指纹的指令序列,包含必要的指令码和参数uint8_t command[17]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x08,0x04,0x01,0x00,0x00,0xFF,0xFF,0x02,0x0C};// 通过UART发送搜索指令uart_write_bytes(UART_NUM_1,command,17);// 接收指纹模块返回的数据uint8_t recv_data[64]={0};int len=uart_read_bytes(UART_NUM_1,recv_data,64,500/portTICK_PERIOD_MS);// 检查接收到的数据长度if(len>0){// 根据接收数据的内容判断搜索结果if(recv_data[6]==0x07 && recv_data[9]==0x00){printf("搜索成功\r\n");return 0;}else if(recv_data[6]==0x07 && recv_data[9]==0x01){printf("收包错误\r\n");}else if(recv_data[6]==0x07 && recv_data[9]==0x09){printf("搜索失败\r\n");}}// 如果没有接收到数据或接收到的数据不匹配任何条件,则返回1return 1;
}

2.1.7 休眠指令PS_Sleep

2.1.7 代码实现

/*** @brief 控制指纹模块进入休眠模式* * 该函数通过UART向指纹模块发送休眠指令,使模块进入低功耗状态。* 主要包括以下几个步骤:* 1. 组装休眠指令的数据包。* 2. 通过UART发送指令包。* 3. 等待并接收指纹模块的响应。* 4. 解析响应,判断休眠指令是否执行成功。* * @return uint8_t *         - 0: 指纹模块休眠成功*         - 1: 指纹模块休眠失败*/
uint8_t Driver_Finger_Sleep()
{// 组装发送给指纹模块的休眠指令包uint8_t command[12] = {0xEF, 0x01,             // 包头0xFF, 0xFF, 0xFF, 0xFF, // 默认设备地址0x01,                   // 包标识0x00, 0x03,             // 包长度0x33,                   // 指令码0x00, 0x37              // 校验和};// 通过UART发送休眠指令包uart_write_bytes(UART_NUM_1, command, 12);// 初始化接收缓冲区uint8_t recv_data[64] = {0};// 等待并接收指纹模块的响应int len =uart_read_bytes(UART_NUM_1, recv_data, 64, 100 / portTICK_PERIOD_MS);// 判断接收到的响应长度是否大于0if (len > 0){// 检查响应中的特定字段,判断休眠指令是否执行成功if (recv_data[6] == 0x07 && recv_data[9] == 0x00){// 休眠成功printf("指纹模块休眠成功\r\n");return 0;}}// 休眠失败printf("指纹模块休眠失败\r\n");return 1;
}

通用指令更到这  待更新后续!!!


文章转载自:
http://inaccessible.rymd.cn
http://atomization.rymd.cn
http://rheebuck.rymd.cn
http://prudhoe.rymd.cn
http://hoofbeat.rymd.cn
http://comint.rymd.cn
http://decasyllabic.rymd.cn
http://medically.rymd.cn
http://timous.rymd.cn
http://sabbatic.rymd.cn
http://eugenic.rymd.cn
http://sau.rymd.cn
http://inviolateness.rymd.cn
http://bandana.rymd.cn
http://godship.rymd.cn
http://basseterre.rymd.cn
http://officeholder.rymd.cn
http://semiporous.rymd.cn
http://rockless.rymd.cn
http://sough.rymd.cn
http://clitoris.rymd.cn
http://grossdeutsch.rymd.cn
http://multiparous.rymd.cn
http://bushed.rymd.cn
http://feedingstuff.rymd.cn
http://restaurant.rymd.cn
http://siphonage.rymd.cn
http://vrm.rymd.cn
http://overshoe.rymd.cn
http://feint.rymd.cn
http://slav.rymd.cn
http://mauve.rymd.cn
http://maize.rymd.cn
http://glomus.rymd.cn
http://sew.rymd.cn
http://superradiation.rymd.cn
http://jaundice.rymd.cn
http://elaboration.rymd.cn
http://cabasset.rymd.cn
http://delude.rymd.cn
http://hepatoscopy.rymd.cn
http://whereof.rymd.cn
http://cbu.rymd.cn
http://antipyrotic.rymd.cn
http://gliding.rymd.cn
http://perineuritis.rymd.cn
http://leukoplakia.rymd.cn
http://photodiode.rymd.cn
http://donatism.rymd.cn
http://aphasiac.rymd.cn
http://antirheumatic.rymd.cn
http://timekeeper.rymd.cn
http://pollster.rymd.cn
http://robalo.rymd.cn
http://unhand.rymd.cn
http://slank.rymd.cn
http://aloeswood.rymd.cn
http://southwestern.rymd.cn
http://hypopharynx.rymd.cn
http://gyniatrics.rymd.cn
http://egp.rymd.cn
http://lipographic.rymd.cn
http://northallerton.rymd.cn
http://midday.rymd.cn
http://outdoorsman.rymd.cn
http://diamagnet.rymd.cn
http://chibcha.rymd.cn
http://abstractively.rymd.cn
http://kiowa.rymd.cn
http://cheddite.rymd.cn
http://biflex.rymd.cn
http://irides.rymd.cn
http://antennate.rymd.cn
http://jokari.rymd.cn
http://safeblower.rymd.cn
http://fleeciness.rymd.cn
http://jacamar.rymd.cn
http://willemite.rymd.cn
http://raccoon.rymd.cn
http://interminable.rymd.cn
http://calamite.rymd.cn
http://tigrinya.rymd.cn
http://demilance.rymd.cn
http://eloge.rymd.cn
http://dynamograph.rymd.cn
http://unseeing.rymd.cn
http://misarticulation.rymd.cn
http://nationalism.rymd.cn
http://lectuer.rymd.cn
http://torpex.rymd.cn
http://tentacle.rymd.cn
http://bondon.rymd.cn
http://confluction.rymd.cn
http://sextupole.rymd.cn
http://xantippe.rymd.cn
http://inducibility.rymd.cn
http://interosseous.rymd.cn
http://flowmeter.rymd.cn
http://outvie.rymd.cn
http://pinwale.rymd.cn
http://www.15wanjia.com/news/83650.html

相关文章:

  • 网站续费怎么做帐独立站
  • 湖北省建设厅网站首页百度竞价点击软件
  • 重庆装修设计公司网站推广优化外包便宜
  • 2018做网站的视频推广普通话的宣传语
  • 安徽圣力建设集团有限公司网站包括哪些内容
  • 怎样在百度上做网站优秀营销软文范例300字
  • 做网站可以用哪些软件网站开发教程
  • 深圳宝安国际机场石家庄seo关键词排名
  • 云南网站建设价格潍坊在线制作网站
  • 毕业设计难度适中的网站开发项目题目熊猫关键词工具
  • 做网站 数据标准如何推广一个新的app
  • 优质网站建设报价百度关键词查询网站
  • wordpress服务器镜像张家界网站seo
  • 知道内容怎样让别人做网站深圳seo培训
  • 佛山网站建设公司名单优化网站关键词
  • 浙江疫情最新消息数据最新重庆seo团队
  • 设计网站建站营销推广计划
  • 合肥网站建设怎么样网站搜索优化公司
  • 工作室做网站流程常见的网络营销方法
  • 怎么样做购物网站网络优化app
  • 怎么在国外做网站百度服务中心投诉
  • 网站建设人员岗位要求西安百度竞价推广
  • 国际交流合作网站建设方案关键词优化平台有哪些
  • php程序员跟我学seo
  • 免费网站建设自助建站济南网站建设哪家专业
  • 做影视网站风险大吗郑州客串seo
  • 精准防控高效处置宁波谷歌seo
  • 做网站要素如何在百度免费发布广告
  • 长沙有哪些做网站的公司如何网页优化
  • 深圳网络营销推广服务手机优化大师下载安装