让STM32蓝丸板读取DS18B20感测的温度信息

这可能是最简单的stm32项目了,整个bom只有ds18b20温度传感器、stm32蓝丸板和一个最平常的4.7k电阻器,外加一款面包板和几根杜邦线。也许有人说这简直就是浪费stm32资源,我说这是入门砖,了解了基本原理后面就是缤纷世界。
ds18b20智能型防水温度传感器 ds18b20是一款智能型防水温度传感器,用于测量-55 to 125°c之间液体温度。由于每个ds18b20包含一个独立ip序列号,多个ds18b20可共用同一条1-wire总线。
ds18b20可以分别在93.75ms和750ms内完成9位和12位的数字量,信息读出或写入仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的ds18b20供电,而无需额外电源。
ds18b20传感器带有电缆和防水功能,可用来方便的测量潮湿环境,即使远距离测量也不会导致信号衰减,测量精度可达±0.5°c。ds18b20集成有12 bits adc,可通过一个简单的数字引脚与任何mcu接口。
ds18b20传感器的不足之处是采用的dallas 1-wire协议有些复杂,需要较多代码才能通信。使用中,还要采用一个4.7k电阻器从vcc对数据进行上拉。
ds18b20与stm32f103c接口 ds18b20与stm32f103c蓝丸板的接口电路很简单,传感器由stm32蓝丸的3.3v引脚供电,gnd引脚与蓝丸gnd连接。数字引脚经过4.7k电阻器上拉后,连接于蓝丸板的pa8引脚。
ds18b20数字温度计提供9-12位(可编程设备温度读数)。由于ds18b20是单线通信,与stm32f103c mcu连接只有一条线,读写以及温度转换所需能量也可以从数据线本身获得。
ds18b20 -stm32代码 让stm32蓝丸板读取ds18b20感测的温度信息,可以各种方法上传如下代码,例如使用usb-ttl转换器模块以串口上传。
int dspin = pa8;
void setup() {
 // put your setup code here, to run once:
 serial.begin(115200);
}
void loop()
{
 // put your main code here, to run repeatedly:
 double temp = tempread();
 temp  = temp * 0.0625; // conversion accuracy is 0.0625 / lsb
 serial.print(temperature: );
 serial.print(temp);
 serial.println( °c);
 serial.println();
 delay(500);
}
boolean ds18b20_init()
{
 pinmode(dspin, output);
 digitalwrite(dspin, high);
 delaymicroseconds(5);
 digitalwrite(dspin, low);
 delaymicroseconds(750);//480-960
 digitalwrite(dspin, high);
 pinmode(dspin, input);
 int t = 0;
 while (digitalread(dspin))
 {
   t++;
   if (t > 60) return false;
   delaymicroseconds(1);
 }
 t = 480 - t;
 pinmode(dspin, output);
 delaymicroseconds(t);
 digitalwrite(dspin, high);
 return true;
}
void ds18b20_write(byte data)
{
 pinmode(dspin, output);
 for (int i = 0; i >= 1;
   delaymicroseconds(50);
   digitalwrite(dspin, high);
 }
}
byte ds18b20_read()
{
 pinmode(dspin, output);
 digitalwrite(dspin, high);
 delaymicroseconds(2);
 byte data = 0;
 for (int i = 0; i >= 1;
   if (digitalread(dspin)) data |= 0x80;
   delaymicroseconds(55);
   pinmode(dspin, output);
   digitalwrite(dspin, high);
 }
 return data;
}
int tempread()
{
 if (!ds18b20_init()) return 0;
 ds18b20_write (0xcc); // send skip rom command
 ds18b20_write (0x44); // send reading start conversion command
 if (!ds18b20_init()) return 0;
 ds18b20_write (0xcc); // send skip rom command
 ds18b20_write (0xbe); // read the register, a total of nine bytes, the first two bytes are the conversion value
 int temp = ds18b20_read (); // low byte
 temp |= ds18b20_read () << 8; // high byte
 return temp;
}
上述代码上传后,serial monitor就开始显示被测环境的的温度数值。

2019年度深圳市软件业务收入百家企业名单出炉,法本再入榜单
iPhone销量在中国仍高速增长 四季度营收或创纪录
步进电机运动规律及速度控制方法
可控硅过零触发调压器原理电路
全球首个1角硬币大小的太赫兹激光收发器具备X射线视觉效果
让STM32蓝丸板读取DS18B20感测的温度信息
如何使用分立元件构建双向开关?
统一通信基础设施对于远程工作有什么影响
奥拓电子推出全新的XR虚拟 SW-RGBW LED天幕屏
V2C MXene组件促进实用锂硫电池的硫释放动力学和锂离子筛分
数显糖度计的应用有哪些
亚马逊2023年净利润304亿美元
训练神经网络的五大算法
提高电动式喇叭音质的方法
接地电阻柜:电网系统的守护者
广州安捷伦电源66319b开机报错维修
什么是1G/2G/2.5G/3G? GSM? GPRS?
华为跑分事件获新进展 华为与3DMark达成共识将在未来开启性能模式
Vishay电容器荣获2021年度AspenCore全球电子成就奖
长江存储与第二届全国大学生集成电路创新创业大赛达成合作