1,温度传感器介绍
a,常用的测温传感器
模拟传感器(热电阻,热电偶)
数字传感器
热电阻:

  • PT100
  • PT1000
  • 原理:电阻得到组织随温度变化
  • 测温方法:电桥测量电压压差
    热电偶:
  • K型(镍絡-镍硅)
  • S型(铂烙-康铜)
  • 热电偶原理:

    b,初识温度传感器


    DS18B20特性:
  • 单总线的温度传感器
  • 测量温度范围为-55C+125C
  • -10+85C范围内,精度为±0.5C
  • 供电电压:3-5.5V,可以使用数据线供电
  • 每个传感器有独立的序列号,支持多路传感器
  • AD转换位数9-12位(可配置)
  • 转换时间750ms(最大)
  • 支持告警设置,告警掉电不丢失
    c,引脚定义:

    • 1地线
    • 2数据线或电源
    • 3电源

      内部结构:

      单总线供电注意事项:
  • 要有足够的电流驱动能力
  • 转换电流约1.5Ma
  • 多个温度传感器同时转换要注意

供电的方式1:

供电方式2:

传感器操作:

  • 配置9,10,11,12bit(默认12bit)
  • 最小分辨率分别是:0.5C,0.25C, 0.125C , 0.0625C(温度)


    转换时间:

    转换时序:
  • 初始化
  • 配置ROM功能命令
  • 内存功能命令
  • 转换数据

ROM命令

  • 读ROM-33H
  • 匹配ROM 55H
  • 跳过ROM CCH(如果有多个温度传感器会导致数据丢失)
  • 搜索ROM FOH
  • 告警搜素 ECH

功能命令

  • 温度转换 44H(启动转换后数据以两个字节形式被存储在高速暂存区中)
  • 读暂存区 BEh 写暂存区 4EH(先写TH和TL寄存器,后写配置寄存器)
  • 拷贝暂存区 48H (把THTL写到EEPROM)
  • 召回EEPROM B8H(把THTL内容从E2prom读到暂存区
  • 读电流模式 B4H

2,温度传感器读写时序讲解
时序分析:

  • 初始化
  • 写时序
  • 读时序

初始化时序:单片机总线持续大于480微妙为低电平(输出模式),DS18B20持续15-60微妙为高电平,之后单片机处于输入模式


逻辑分析仪抓取波形:



3,读取温度数据1
创建工程模板:aos create project 18b20 -b mk3080 -t blink_demo -d ./temp
aos make menuconfig 配置是否需要修改(application为blink_demo,BSP为mk3080)
修改blink_demo.c中的内容

#include <stdio.h>
#include "aos/kernel.h"
#include "ulog/ulog.h"
#include "board.h"
#include "aos/hal/gpio.h"/*** Brief:* This test code shows how to configure LED gpio.*/
#ifdef LED1
#define GPIO_LED_IO         LED1
#elif LED2
#define GPIO_LED_IO         LED2
#elif LED3
#define GPIO_LED_IO         LED3
#elif LED4
#define GPIO_LED_IO         LED4
#else
#define GPIO_LED_IO         0xffff
#endifgpio_dev_t led_nucleo;#define G18b20IO  6
gpio_dev_t GPIO_18b20io;void initForInput()
{GPIO_18b20.config=INPUT_PULL_UP;if(GPIO_18b20io.priv){free(GPIO_18b20io.priv);GPIO_18b20io.priv = NULL;}hal_gpio_init(&GPIO_18b20);
}void initForOutput()
{GPIO_18b20.config = OUTPUT_PUSH_PULL;hal_gpio_init(&GPIO_18b20);
}
//初始化
void init_18b20()
{int inputValue=0;hal_gpio_output_high(&GPIO_18b20);DelayUs(100);hal_gpio_output_low(&GPIO_18b20);DelayUs(750);hal_gpio_output_high(&GPIO_18B20);initForInput();DelayUs(50);hal_gpio_input_get(&GPIO_18b20,inputValue);if(inputValue){printf("18b20 init failed\n");return -1;}initForOutput();hal_gpio_output_high(&GPIO_18b20);DelayUs(15);retrun ;}
//写时序
void write_18b20_byte(unsigned char data)
{int i;for(i=0;i<8;i++){hal_gpio_output_low(&GPIO_18B20);if(data&0x01){    //write 1 to 18b20DelayUs(10);hal_gpio_output_high(&GPIO_18b20);DelayUs(45);}else{DelayUs(60);hal_gpio_output_high(&GPIO_18b20);}DelayUs(10);data>>=1;}
}
//读时序
unsigned char read_18b20_byte()
{int i;int inputValue;int reByte=0;for(i=0;i<8;i++){hal_gpio_output_low(&GPIO_18b20);initForInput();DelayUs(5);hal_gpio_input_get(&GPIO_18b20,&inputValue);reByte = reByte>>1;if(inputValue){reByte |= 0x80;}initForOutput();hal_gpio_output_high(&GPIO_18b20);DelayUs(50);}retrun  reByte;
}
//从18b20温度传感器读温度值到暂存寄存器中
unsigned short readTempFrom18b20()
{int ret;unsigned char tempH;unsigned char tempL;unsigned short tmep;ret = init_18b20();if(ret<0){return -1;}write_18b20_byte(0xCC);write_18b20_byte(0x44);DelayUs(2000);write_18b20_byte(0xCC);write_18b20_byte(0xbe);DelayUs(500);tempL= read_18b20_byte();tempH = read_18b20_byte();temp = tempH*256 + tempL;printf("read th=%d,tl=%d,temp=%d\n",tempH,tempL,temp);return temp;}int application_start(int argc, char *argv[])
{float temp;/* gpio port config */GPIO_18b20io.port = G18b20IO;/* set as output mode */GPIO_18b20io.config = OUTPUT_PUSH_PULL;/* configure GPIO with the given settings */hal_gpio_init(&GPIO_18b20io);while (1){/* Insert delay 1000 ms */temp = readTempFrom18b20();printf("current temp=%f\n",(float)temp/16;aos_msleep(1000);}return 0;
}

aos make 进行编译,然后烧录到开发板中。
接线方式:传感器的DQ数据线接到开发板的PA0口,GND接到开发板的GND,VCC接到开发板3.3v上。

4,温度数据上云1,温度异常事件上报,温度异常参数设置
使用连网程序,让温度数据上阿里云。
首先创建一个工程(可以读取温度数据,并且可以将数据上传到阿里云)

aos create project templink -b mk3080 -t linkkit_demo -d ./temp

将blink_demo.c 下添加的读取温度传感器的值得代码移植到templink目录的相关连网代码中。
a,在项目管理-生活物联网平台我的天猫精灵WiFi项目中创建一个新产品:https://living.aliyun.com
选择物理模型为温湿度传感器。



将创建好的设备的三元组写入到linkkit_example_solo.c 中,并将blink_demo.c的application_start()函数中的gpio的初始化写入到templink目录下app_entry.c的aos_loop_run()函数之前。

#include "aos/kernel.h"#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "linkkit/infra/infra_types.h"
#include "linkkit/infra/infra_defs.h"
#include "linkkit/infra/infra_compat.h"
#include "linkkit/dev_model_api.h"
#include "linkkit/infra/infra_config.h"
#include "linkkit/wrappers/wrappers.h"
#include "aos/hal/gpio.h"  //添加的#ifdef INFRA_MEM_STATS#include "linkkit/infra/infra_mem_stats.h"
#endif#include "cJSON.h"
#ifdef ATM_ENABLED#include "at_api.h"
#endif
#include "app_entry.h"// for demo only
#define PRODUCT_KEY      "a15JbJC8ibT"
#define PRODUCT_SECRET   "8sOLdfoddWuIsz56"
#define DEVICE_NAME      "tempsensor"
#define DEVICE_SECRET    "e80bc6df67206eca0455ed726d820688"#define G18b20IO  6
gpio_dev_t GPIO_18b20io;float tempHigh = 30;
float tempLow = 15;
float temp;#define EXAMPLE_TRACE(...)                                          \do {                                                            \HAL_Printf("\033[1;32;40m%s.%d: ", __func__, __LINE__);     \HAL_Printf(__VA_ARGS__);                                    \HAL_Printf("\033[0m\r\n");                                  \} while (0)#define EXAMPLE_MASTER_DEVID            (0)
#define EXAMPLE_YIELD_TIMEOUT_MS        (200)typedef struct {int master_devid;int cloud_connected;int master_initialized;
} user_example_ctx_t;/*** These PRODUCT_KEY|PRODUCT_SECRET|DEVICE_NAME|DEVICE_SECRET are listed for demo only** When you created your own devices on iot.console.com, you SHOULD replace them with what you got from console**/void initForInput()
{GPIO_18b20.config=INPUT_PULL_UP;if(GPIO_18b20io.priv){free(GPIO_18b20io.priv);GPIO_18b20io.priv = NULL;}hal_gpio_init(&GPIO_18b20);
}void initForOutput()
{GPIO_18b20.config = OUTPUT_PUSH_PULL;hal_gpio_init(&GPIO_18b20);
}
//初始化
void init_18b20()
{int inputValue=0;hal_gpio_output_high(&GPIO_18b20);DelayUs(100);hal_gpio_output_low(&GPIO_18b20);DelayUs(750);hal_gpio_output_high(&GPIO_18B20);initForInput();DelayUs(50);hal_gpio_input_get(&GPIO_18b20,inputValue);if(inputValue){printf("18b20 init failed\n");return -1;}initForOutput();hal_gpio_output_high(&GPIO_18b20);DelayUs(15);retrun ;}
//写时序
void write_18b20_byte(unsigned char data)
{int i;for(i=0;i<8;i++){hal_gpio_output_low(&GPIO_18B20);if(data&0x01){    //write 1 to 18b20DelayUs(10);hal_gpio_output_high(&GPIO_18b20);DelayUs(45);}else{DelayUs(60);hal_gpio_output_high(&GPIO_18b20);}DelayUs(10);data>>=1;}
}
//读时序
unsigned char read_18b20_byte()
{int i;int inputValue;int reByte=0;for(i=0;i<8;i++){hal_gpio_output_low(&GPIO_18b20);initForInput();DelayUs(5);hal_gpio_input_get(&GPIO_18b20,&inputValue);reByte = reByte>>1;if(inputValue){reByte |= 0x80;}initForOutput();hal_gpio_output_high(&GPIO_18b20);DelayUs(50);}retrun  reByte;
}
//从18b20温度传感器读温度值到暂存寄存器中
unsigned short readTempFrom18b20()
{int ret;unsigned char tempH;unsigned char tempL;unsigned short tmep;ret = init_18b20();if(ret<0){return -1;}write_18b20_byte(0xCC);write_18b20_byte(0x44);DelayUs(2000);write_18b20_byte(0xCC);write_18b20_byte(0xbe);DelayUs(500);tempL= read_18b20_byte();tempH = read_18b20_byte();temp = tempH*256 + tempL;printf("read th=%d,tl=%d,temp=%d\n",tempH,tempL,temp);return temp;}
static user_example_ctx_t g_user_example_ctx;/** cloud connected event callback */
static int user_connected_event_handler(void)
{EXAMPLE_TRACE("Cloud Connected");g_user_example_ctx.cloud_connected = 1;return 0;
}/** cloud disconnected event callback */
static int user_disconnected_event_handler(void)
{EXAMPLE_TRACE("Cloud Disconnected");g_user_example_ctx.cloud_connected = 0;return 0;
}void initGPIO18b20()
{GPIO_18b20io.port = G18b20IO;/* set as output mode */GPIO_18b20io.config = OUTPUT_PUSH_PULL;/* configure GPIO with the given settings */hal_gpio_init(&GPIO_18b20io);
}/* device initialized event callback */
static int user_initialized(const int devid)
{EXAMPLE_TRACE("Device Initialized");g_user_example_ctx.master_initialized = 1;return 0;
}/** recv property post response message from cloud **/
/** recv property post response message from cloud **/
static int user_report_reply_event_handler(const int devid, const int msgid, const int code, const char *reply,const int reply_len)
{EXAMPLE_TRACE("Message Post Reply Received, Message ID: %d, Code: %d, Reply: %.*s", msgid, code,reply_len,(reply == NULL) ? ("NULL") : (reply));return 0;
}/** recv event post response message from cloud **/
static int user_trigger_event_reply_event_handler(const int devid, const int msgid, const int code, const char *eventid,const int eventid_len, const char *message, const int message_len)
{EXAMPLE_TRACE("Trigger Event Reply Received, Message ID: %d, Code: %d, EventID: %.*s, Message: %.*s",msgid, code,eventid_len,eventid, message_len, message);return 0;
}
/** recv event post response message from cloud **/
static int user_property_set_event_handler(const int devid, const char *request, const int request_len)
{int res = 0;cJSON  *root,*prop;EXAMPLE_TRACE("Property Set Received, Request: %s", request);root = cJSON_Parse(request);if(root == NULL){return res;}prop = cJSON_GetObjectItem(root,"EnvTemp_High_Threshodl");if(prop!=NULL && cJSON_IsNumber(prop){tempHigh = prop->valueint;printf("set EnvTemp_High_Threshodl:%f\n",tempHigh);}prop = cJSON_GetObjectItem(root,"EnvTemp_Low_Threshdl");if(prop!=NULL && cJSON_IsNumber(prop){tempLow = prop->valueinit;printf("set EnvTemp_Low_Threshodl:%f\n",tempLow);}res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,(unsigned char *)request, request_len);EXAMPLE_TRACE("Post Property Message ID: %d", res);return 0;
}static int user_service_request_event_handler(const int devid, const char *serviceid, const int serviceid_len,const char *request, const int request_len,char **response, int *response_len)
{int add_result = 0;int ret = -1;cJSON *root = NULL, *item_number_a = NULL, *item_number_b = NULL;const char *response_fmt = "{\"Result\": %d}";EXAMPLE_TRACE("Service Request Received, Service ID: %.*s, Payload: %s", serviceid_len, serviceid, request);/* Parse Root */root = cJSON_Parse(request);if (root == NULL || !cJSON_IsObject(root)) {EXAMPLE_TRACE("JSON Parse Error");return -1;}do{if (strlen("Operation_Service") == serviceid_len && memcmp("Operation_Service", serviceid, serviceid_len) == 0) {/* Parse NumberA */item_number_a = cJSON_GetObjectItem(root, "NumberA");if (item_number_a == NULL || !cJSON_IsNumber(item_number_a)) {break;}EXAMPLE_TRACE("NumberA = %d", item_number_a->valueint);/* Parse NumberB */item_number_b = cJSON_GetObjectItem(root, "NumberB");if (item_number_b == NULL || !cJSON_IsNumber(item_number_b)) {break;}EXAMPLE_TRACE("NumberB = %d", item_number_b->valueint);add_result = item_number_a->valueint + item_number_b->valueint;ret = 0;/* Send Service Response To Cloud */}}while(0);*response_len = strlen(response_fmt) + 10 + 1;*response = (char *)HAL_Malloc(*response_len);if (*response != NULL) {memset(*response, 0, *response_len);HAL_Snprintf(*response, *response_len, response_fmt, add_result);*response_len = strlen(*response);}cJSON_Delete(root);return ret;
}
static int user_timestamp_reply_event_handler(const char *timestamp)
{EXAMPLE_TRACE("Current Timestamp: %s", timestamp);return 0;
}/** fota event handler **/
static int user_fota_event_handler(int type, const char *version)
{char buffer[128] = {0};int buffer_length = 128;/* 0 - new firmware exist, query the new firmware */if (type == 0) {EXAMPLE_TRACE("New Firmware Version: %s", version);IOT_Linkkit_Query(EXAMPLE_MASTER_DEVID, ITM_MSG_QUERY_FOTA_DATA, (unsigned char *)buffer, buffer_length);}return 0;
}
/* cota event handler */
static int user_cota_event_handler(int type, const char *config_id, int config_size, const char *get_type,const char *sign, const char *sign_method, const char *url)
{char buffer[128] = {0};int buffer_length = 128;/* type = 0, new config exist, query the new config */if (type == 0) {EXAMPLE_TRACE("New Config ID: %s", config_id);EXAMPLE_TRACE("New Config Size: %d", config_size);EXAMPLE_TRACE("New Config Type: %s", get_type);EXAMPLE_TRACE("New Config Sign: %s", sign);EXAMPLE_TRACE("New Config Sign Method: %s", sign_method);EXAMPLE_TRACE("New Config URL: %s", url);IOT_Linkkit_Query(EXAMPLE_MASTER_DEVID, ITM_MSG_QUERY_COTA_DATA, (unsigned char *)buffer, buffer_length);}return 0;
}void user_post_property(void)
{static int cnt = 0;int res = 0;char property_payload[30] = {0};// HAL_Snprintf(property_payload, sizeof(property_payload), "{\"Counter\": %d}", cnt++);temp = readTempFrom18b20();temp = temp/16;if(countIndex == 0){sprintf(property_payload,"{\"temperature\":%f}",temp);countIndex++;}else if(countIndex == 1){sprintf(property_payload,"{\"EnvTemp_High_Threshold\":%f}",tempHigh);countIndex++;}else if(countIndex == 2){sprintf(property_payload,"{\"EnvTemp_low_Threshold\":%f}",tempLow);countIndex++;}else{countIndex++;}res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,(unsigned char *)property_payload, strlen(property_payload));EXAMPLE_TRACE("Post Property Message ID: %d", res);
}void user_post_TL_event(void)
{int res = 0;char *event_id = "xxxxxx";  //设置好的设备事件的标识符char *event_payload = "";res = IOT_Linkkit_TriggerEvent(EXAMPLE_MASTER_DEVID, event_id, strlen(event_id),event_payload, strlen(event_payload));EXAMPLE_TRACE("Post Event Message ID: %d", res);
}void user_post_TH_event(void)
{int res = 0;char *event_id = "xxxx";char *event_payload = "";res = IOT_Linkkit_TriggerEvent(EXAMPLE_MASTER_DEVID, event_id, strlen(event_id),event_payload, strlen(event_payload));EXAMPLE_TRACE("Post Event Message ID: %d", res);
}void user_deviceinfo_update(void)
{int res = 0;char *device_info_update = "[{\"attrKey\":\"abc\",\"attrValue\":\"hello,world\"}]";res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_DEVICEINFO_UPDATE,(unsigned char *)device_info_update, strlen(device_info_update));EXAMPLE_TRACE("Device Info Update Message ID: %d", res);
}
void user_deviceinfo_delete(void)
{int res = 0;char *device_info_delete = "[{\"attrKey\":\"abc\"}]";res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_DEVICEINFO_DELETE,(unsigned char *)device_info_delete, strlen(device_info_delete));EXAMPLE_TRACE("Device Info Delete Message ID: %d", res);
}static int user_cloud_error_handler(const int code, const char *data, const char *detail)
{EXAMPLE_TRACE("code =%d ,data=%s, detail=%s", code, data, detail);return 0;
}void set_iotx_info()
{char _product_key[IOTX_PRODUCT_KEY_LEN + 1] = {0};char _device_name[IOTX_DEVICE_NAME_LEN + 1] = {0};HAL_GetProductKey(_product_key);if (strlen(_product_key) == 0) {HAL_SetProductKey(PRODUCT_KEY);HAL_SetProductSecret(PRODUCT_SECRET);}HAL_GetDeviceName(_device_name);if (strlen(_device_name) == 0) {HAL_SetDeviceName(DEVICE_NAME);HAL_SetDeviceSecret(DEVICE_SECRET);}
}int linkkit_main(void *paras)
{int res = 0;int cnt = 0;int auto_quit = 0;iotx_linkkit_dev_meta_info_t master_meta_info;int domain_type = 0, dynamic_register = 0, post_reply_need = 0, fota_timeout = 30;int   argc = 0;char  **argv = NULL;if (paras != NULL) {argc = ((app_main_paras_t *)paras)->argc;argv = ((app_main_paras_t *)paras)->argv;}
#ifdef ATM_ENABLEDif (IOT_ATM_Init() < 0) {EXAMPLE_TRACE("IOT ATM init failed!\n");return -1;}
#endifif (argc >= 2 && !strcmp("auto_quit", argv[1])) {auto_quit = 1;cnt = 0;
}memset(&g_user_example_ctx, 0, sizeof(user_example_ctx_t));memset(&master_meta_info, 0, sizeof(iotx_linkkit_dev_meta_info_t));HAL_GetProductKey(master_meta_info.product_key);HAL_GetDeviceName(master_meta_info.device_name);HAL_GetProductSecret(master_meta_info.product_secret);HAL_GetDeviceSecret(master_meta_info.device_secret);IOT_SetLogLevel(IOT_LOG_INFO);/* Register Callback */IOT_RegisterCallback(ITE_CONNECT_SUCC, user_connected_event_handler);IOT_RegisterCallback(ITE_DISCONNECTED, user_disconnected_event_handler);IOT_RegisterCallback(ITE_SERVICE_REQUEST, user_service_request_event_handler);IOT_RegisterCallback(ITE_PROPERTY_SET, user_property_set_event_handler);IOT_RegisterCallback(ITE_REPORT_REPLY, user_report_reply_event_handler);IOT_RegisterCallback(ITE_TRIGGER_EVENT_REPLY, user_trigger_event_reply_event_handler);IOT_RegisterCallback(ITE_TIMESTAMP_REPLY, user_timestamp_reply_event_handler);IOT_RegisterCallback(ITE_INITIALIZE_COMPLETED, user_initialized);IOT_RegisterCallback(ITE_FOTA, user_fota_event_handler);IOT_RegisterCallback(ITE_COTA, user_cota_event_handler);IOT_RegisterCallback(ITE_CLOUD_ERROR, user_cloud_error_handler);domain_type = IOTX_CLOUD_REGION_SHANGHAI;IOT_Ioctl(IOTX_IOCTL_SET_DOMAIN, (void *)&domain_type);/* Choose Login Method */dynamic_register = 0;IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register);/* post reply doesn't need */post_reply_need = 1;IOT_Ioctl(IOTX_IOCTL_RECV_EVENT_REPLY, (void *)&post_reply_need);IOT_Ioctl(IOTX_IOCTL_FOTA_TIMEOUT_MS, (void *)&fota_timeout);
#if defined(USE_ITLS){char url[128] = {0};int port = 1883;snprintf(url, 128, "%s.itls.cn-shanghai.aliyuncs.com",master_meta_info.product_key);IOT_Ioctl(IOTX_IOCTL_SET_MQTT_DOMAIN, (void *)url);IOT_Ioctl(IOTX_IOCTL_SET_CUSTOMIZE_INFO, (void *)"authtype=id2");IOT_Ioctl(IOTX_IOCTL_SET_MQTT_PORT, &port);}
#endif/* Create Master Device Resources */do {g_user_example_ctx.master_devid = IOT_Linkkit_Open(IOTX_LINKKIT_DEV_TYPE_MASTER, &master_meta_info);if (g_user_example_ctx.master_devid >= 0) {break;}EXAMPLE_TRACE("IOT_Linkkit_Open failed! retry after %d ms\n", 2000);HAL_SleepMs(2000);} while (1);/* Start Connect Aliyun Server */do {res = IOT_Linkkit_Connect(g_user_example_ctx.master_devid);if (res >= 0) {break;}EXAMPLE_TRACE("IOT_Linkkit_Connect failed! retry after %d ms\n", 5000);HAL_SleepMs(5000);} while (1);while (1) {IOT_Linkkit_Yield(EXAMPLE_YIELD_TIMEOUT_MS);/* Post Proprety Example */if ((cnt % 20) == 0) {user_post_property();}/* Post Event Example */if ((cnt % 50) == 0) {if(temp>tempHigh){user_post_TH_event();}if(temp<tempLow){user_post_TL_event();}}cnt++;if (auto_quit == 1 && cnt > 3600) {break;}}IOT_Linkkit_Close(g_user_example_ctx.master_devid);IOT_DumpMemoryStats(IOT_LOG_DEBUG);return 0;
}


编译前先进行aos make menuconfig配置(需要选上JSON Libarary),aos make进行编译,烧录。
配网成功后,使用putty查看log信息。通过运行状态查看温度是否上传到云平台。

WiFi温湿度传感器开发相关推荐

  1. DHT11温湿度传感器开发

    DHT11温湿度传感器开发 单总线说明 单总线传送数据位定义 数据格式 数据时序图 外设读取步骤 单总线说明   DHT11 器件采用简化的单总线通信.单总线即只有一根数据线,系统中的数据交换.控制均 ...

  2. 自己动手做一个小爱同学温湿度传感器(成本八块左右)

    自己动手做一个小爱同学温湿度传感器 1.开发环境简介 2.开发思路 3.程序编写 (1)将点灯科技库文件和DHT11模块库文件导入Arduino的libraries文件夹. (2)下载点灯科技APP, ...

  3. ESP32 开发笔记(三)源码示例 8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器

    开发板购买链接 https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.50111deb2Ij1As&ft=t&id=62636 ...

  4. 嵌入式设计与开发项目-DHT11温湿度传感器程序设计

    嵌入式设计与开发项目-DHT11温湿度传感器程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.DHT11温湿度的头文件"dht11.h" 3.DHT11温 ...

  5. 物联网ARM开发-4协议-单总线应用温湿度传感器

    前言:STM32 虽然内部自带了温度传感器,但是因为芯片温升较大等问题,与实际温度差别较大, 所以,本章我们将向大家介绍如何通过 STM32 来读取外部数字温度传感器的温度,来得到较 为准确的环境温度 ...

  6. 【linux驱动开发】i2c驱动框架之温湿度传感器htu21d

    文章目录 一.linux内核i2c驱动框架 1.1 i2c适配器 1.2 i2c设备驱动 1.3 i2c设备驱动匹配过程 二.温湿度传感器htu21d 三.htu21d设备驱动编写 3.1 修改设备树 ...

  7. Arduino开发板使用DHT11温湿度传感器的方法

    在本篇文章中,我们将DHT11温湿度传感器与Arduino开发板和LCD显示屏连接,设计一种能够测量室温和环境湿度的设备.简单地说,我们将使用Arduino和DHT11传感器设计数字湿度和温度计,并将 ...

  8. 【正点原子STM32连载】第四十章 DHT11数字温湿度传感器 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  9. Nordic 蓝牙芯片上开发 SHT3x系列温湿度传感器

    第1部分 SHT31传感器介绍 1.1芯片简介 SHT3X系列是由瑞士Sensirion生产的高精度温湿度传感器,也是Sensirion公司目前主打的温湿度传感器系列.现在网上常见的相关资料调试的基本 ...

最新文章

  1. java dbrecord_JFinal 独创 Db + Record 模式
  2. RESTful架构详解【转】
  3. SAP Cloud for Customer的微信集成原型开发完毕后的效果示意图
  4. php原生好还是tp好_webapp/H5封装,混开APP,没有原生APP好?事实是这样的吗?
  5. Apache Hadoop 启动报错:masternode:ssh: connect to host master port 22: Connection timed out 总结
  6. Android系统性能优化(59)----代码、图片和布局优化
  7. TTS Service Extended (进程:com.google.tts)意外停止 恢复被阉割的TTS文字转语音功能
  8. FastReport浏览器直接打印无须预览(2023终版)
  9. 目录大全:RDMA、IB卡、IB驱动下载、ubuntu16.04安装 IB驱动、ib_read/write_bw 测试RDMA读写....
  10. windows xp 64 位
  11. 通过IMAP方式迁移U-Mail邮件到Exchange 2013之Exchange 2007 系统搭建!
  12. 计算机图形学 | 欢迎来到图形世界
  13. 结对编程项目——最长英语单词链
  14. 2020年-数据库实验详述-BUPT 信通院-- 十安辰
  15. 微信查询天气公众账号小记
  16. html坦克游戏,HTML5制作的坦克游戏
  17. 《前端开发者的进阶之路》
  18. 风之语.惊闻周星驰电影票房超过30亿RMB
  19. 【Java杂货铺】JVM#Java高墙之内存模型
  20. 03-CSS文字文本样式

热门文章

  1. python网盘搜索引擎_打造一个蓝奏云网盘搜索引擎
  2. 可道云个人网盘-Docker安装
  3. 数字温度计设计c语言,数字温度计的设计与制作
  4. MacOS没有管理员账号的解决方法
  5. 孙溟㠭(展)为秘鲁总统夫人‘埃莲娜卡尔普托莱多’女士治名章篆刻印章
  6. 安装Ubuntu16.04视频播放器smplayer
  7. 面部识别预处理全家桶:mtcnn人脸捕捉、人脸点对齐、仿射运算
  8. 一道CF送命题引发的博文
  9. 2021年系统集成项目管理工程师证书领取
  10. 实验室服务器多人共用账号,搭建多人共用的GPU服务器