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

网站充值支付宝收款怎么做seo数据分析哪些方面

网站充值支付宝收款怎么做,seo数据分析哪些方面,番禺网站开发公司,二次元主题wordpress基于Freertos的ESP-IDF开发——6.使用DHT1温湿度传感器 0. 前言1. DHT11驱动原理2. 完整代码3. 演示效果4. 其他FreeRtos文章 0. 前言 开发环境:ESP-IDF 4.3 操作系统:Windows10 专业版 开发板:自制的ESP32-WROOM-32E 准备一个DHT11温湿度传…

基于Freertos的ESP-IDF开发——6.使用DHT1温湿度传感器

  • 0. 前言
  • 1. DHT11驱动原理
  • 2. 完整代码
  • 3. 演示效果
  • 4. 其他FreeRtos文章

0. 前言

开发环境:ESP-IDF 4.3
操作系统:Windows10 专业版
开发板:自制的ESP32-WROOM-32E
准备一个DHT11温湿度传感器

DHT11是比较经典的入门级温湿度传感器,这节我们学习使用它来测得周边环境的温湿度数据。

1. DHT11驱动原理

在这里插入图片描述
在这里插入图片描述
其控制时序如下:

  1. 主机发送起始信号:主机将总线拉低至少18ms,然后拉高20-40us,等待DHT11响应。
  2. DHT11响应信号:DHT11在收到起始信号后,会将总线拉低80us,然后拉高80us,表示已经准备好发送数据。
  3. DHT11发送数据:DHT11会依次发送40位数据,每一位数据的时间长度为50us,高电平表示1,低电平表示0。
  4. 主机接收数据:主机在接收到每一位数据后,会等待50us,然后再接收下一位数据。
  5. 数据校验:DHT11发送完40位数据后,会再次将总线拉低50us,然后拉高80us,表示数据已经发送完毕。主机接收到数据后,需要进行校验,确保数据的正确性。
  6. 通信结束:主机在接收到数据后,需要将总线拉高至少40us,表示通信结束。

需要注意的是,DHT11的控制时序非常严格,如果时序不正确,可能会导致数据传输失败。因此,在使用DHT11时,需要仔细按照时序进行控制。

首先,我们将引脚设置为输出模式,并将其拉低20毫秒,然后将其拉高,最后将其设置为输入模式。

然后,我们等待DHT11的响应信号,并开始读取数据。

我们使用FreeRTOS的计时器来计算每个位的持续时间,并将其转换为0或1的位。

2. 完整代码

#include <string.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <nvs_flash.h>
#include <driver/rmt.h>
#include <soc/rmt_reg.h>
#include "driver/gpio.h" 
#include <esp_log.h>#define DHT11_GPIO	26		// DHT11引脚定义
const static char *TAG = "DHT11_Demo";// 温度是10倍,/10有1位小数
int temp_x10 = 123;
int humidity = 60;
const int channel = 0;uint8_t DHT11_PIN = -1;
// 将RMT读取到的脉冲数据处理为温度和湿度
static int parse_items(rmt_item32_t *item, int item_num, int *humidity, int *temp_x10);// DHT11 初始化
void DHT11_Init(uint8_t dht11_pin)
{DHT11_PIN = dht11_pin;const int RMT_CLK_DIV = 80;										// RMT计数器时钟分频器const int RMT_TICK_10_US = (80000000 / RMT_CLK_DIV / 100000);	// RMT计数器10us.(时钟源是APB时钟)const int rmt_item32_tIMEOUT_US = 1000;							// RMT接收超时usrmt_config_t rmt_rx = {.gpio_num = dht11_pin,.channel = channel,.clk_div = RMT_CLK_DIV,.mem_block_num = 1,.rmt_mode = RMT_MODE_RX,					// 接收模式.rx_config.filter_en = false,.rx_config.filter_ticks_thresh = 100,.rx_config.idle_threshold = rmt_item32_tIMEOUT_US / 10 * (RMT_TICK_10_US),};rmt_config(&rmt_rx);rmt_driver_install(rmt_rx.channel, 1000, 0);	// 安装驱动//rmt_driver_uninstall(rmt_rx.channel)			// 卸载驱动
}// 将RMT读取到的脉冲数据处理为温度和湿度
static int parse_items(rmt_item32_t *item, int item_num, int *humidity, int *temp_x10)
{int i = 0;unsigned rh = 0, temp = 0, checksum = 0;if (item_num < 42){					// 检查是否有足够的脉冲数ESP_LOGI(TAG, "item_num < 42  %d",item_num);return 0;}item++;								// 跳过开始信号脉冲for (i = 0; i < 16; i++, item++){	// 提取湿度数据rh = (rh << 1) + (item->duration1 < 35 ? 0 : 1);}for (i = 0; i < 16; i++, item++){	// 提取温度数据temp = (temp << 1) + (item->duration1 < 35 ? 0 : 1);}for (i = 0; i < 8; i++, item++){	// 提取校验数据checksum = (checksum << 1) + (item->duration1 < 35 ? 0 : 1);}// 检查校验if ((((temp >> 8) + temp + (rh >> 8) + rh) & 0xFF) != checksum){ESP_LOGI(TAG, "Checksum failure %4X %4X %2X\n", temp, rh, checksum);return 0;}// 返回数据*humidity = rh >> 8;*temp_x10 = (temp >> 8) * 10 + (temp & 0xFF);return 1;
}// 使用RMT接收DHT11数据
int DHT11_StartGet(int *temp_x10, int *humidity)
{RingbufHandle_t rb = NULL;size_t rx_size = 0;rmt_item32_t *item;int rtn = 0;//获得RMT RX环形缓冲区句柄,并处理RX数据rmt_get_ringbuf_handle(channel, &rb);if (!rb){return 0;}//发送20ms脉冲启动DHT11单总线gpio_set_level(DHT11_PIN, 1);gpio_set_direction(DHT11_PIN, GPIO_MODE_OUTPUT);ets_delay_us(1000);gpio_set_level(DHT11_PIN, 0);ets_delay_us(20000);//将rmt_rx_start和rmt_rx_stop放入缓存rmt_rx_start(channel, 1);rmt_rx_stop(channel);//信号线设置为输入准备接收数据gpio_set_level(DHT11_PIN, 1);gpio_set_direction(DHT11_PIN, GPIO_MODE_INPUT);//这次启动RMT接收器以获取数据rmt_rx_start(channel, 1);//从环形缓冲区中取出数据item = (rmt_item32_t *)xRingbufferReceive(rb, &rx_size, 2);if (item != NULL){int n;n = rx_size / 4 - 0;// 解析来自ringbuffer的数据值.rtn = parse_items(item, n, humidity, temp_x10);// 解析数据后,将空格返回到ringbuffer.vRingbufferReturnItem(rb, (void *)item);}//停止RMT接收rmt_rx_stop(channel);return rtn;
}// 温度 湿度变量
int temp = 0,hum = 0;// 主函数
void app_main(void)
{ESP_ERROR_CHECK(nvs_flash_init());vTaskDelay(100 / portTICK_PERIOD_MS);ESP_LOGI(TAG, "[APP] APP Is Start!~\r\n");ESP_LOGI(TAG, "[APP] IDF Version is %d.%d.%d",ESP_IDF_VERSION_MAJOR,ESP_IDF_VERSION_MINOR,ESP_IDF_VERSION_PATCH);ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size());ESP_LOGI(TAG, "[APP] IDF version: %s", esp_get_idf_version());DHT11_Init(DHT11_GPIO);while (1){if (DHT11_StartGet(&temp, &hum)){ESP_LOGI(TAG, "[%lld] temp->%i.%i C     hum->%i%%", esp_timer_get_time(), temp / 10, temp % 10, hum);}vTaskDelay(1000 / portTICK_PERIOD_MS);}
}

3. 演示效果

如图所示,这是我把它放在了我的电脑排风口附近测得的温度:
在这里插入图片描述

4. 其他FreeRtos文章

基于Freertos的ESP-IDF开发——0.Windows下espidf的环境搭建
基于Freertos的ESP-IDF开发——1.HelloWorld
基于Freertos的ESP-IDF开发——2.点亮一颗LED
基于Freertos的ESP-IDF开发——3.使用任务(上)
基于Freertos的ESP-IDF开发——3.使用任务(中)
基于Freertos的ESP-IDF开发——3.使用任务(下)
基于Freertos的ESP-IDF开发——4.使用任务的方式来点亮LED灯
基于Freertos的ESP-IDF开发——5.使用按键[不带消抖、带消抖、长按短按识别]

http://www.hkea.cn/news/553096/

相关文章:

  • 做生存分析的网站有哪些专业的网站优化公司
  • 网站双倍浮动百度联盟app
  • 北京网站设计确保代码符合w3c广州网络营销的推广
  • 做网站实名认证有什么用百度移动端模拟点击排名
  • 知更鸟wordpress 怎样沈阳百度seo关键词优化排名
  • 携程网站模板互联网营销策略有哪些
  • 做网站内链什么意思上海排名优化seobwyseo
  • 四川做直销会员网站百度网盘帐号登录入口
  • 做百度竞价对网站有无要求网站推广排名服务
  • 建设工程合同包括成都网站改版优化
  • 深圳不加班的互联网公司整站seo优化
  • 中国做的很好的食品网站肇庆疫情最新消息
  • 做时时彩网站微信seo关键词有话要多少钱
  • 陇南市建设局网站商务软文写作
  • 做学术研究的网站营销方案怎么写?
  • 专业网站设计公司有哪些秒收录关键词代发
  • 织梦网站模板源码下载真实有效的优化排名
  • 网站建设过程中什么最重要磁力链bt磁力天堂
  • html5企业网站案例鹤壁搜索引擎优化
  • 网站建设平台简介链接交换平台
  • 照片展示网站模板宁波seo咨询
  • 奉贤建设机械网站制作长沙网址seo
  • 上海企业网站模板建站常用的网络推广方法
  • 大连零基础网站建设教学培训济南seo优化公司
  • html 做网站案例简单网站推广建设
  • 践行新使命忠诚保大庆网站建设线上广告
  • 定制网站建设服务商商家联盟营销方案
  • 集团官网建设公司外贸seo推广公司
  • 佛山新网站制作平台网站诊断工具
  • 做PPT的网站canvawhois查询