DS18B20 蓝牙温度计

DS18B20 蓝牙温度计
一天早上我醒来,想知道外面的温度是多少,而不是跑去家得宝花2美元买一个玻璃温度计,我决定自己构建一个无线温度传感器。板子的核心是一个SO8封装的PIC12F675微控制器。板子的右侧是线性电源(LP2950),底部中心是DS18B20单总线温度传感器,在左边你可以看到Sure TTL蓝牙模块。

作为标准协议的忠实粉丝,我选择通过蓝牙SPP(串行端口协议)链路传输温度数据,而不是XBee或其他类似的无线架构。尽管蓝牙无线电相比XBee模块消耗更多功率,但优点是在接收端不需要定制硬件。由于几乎所有现代笔记本电脑都集成了蓝牙芯片组,这实际上意味着在PC端不需要硬件。
在翻遍了我所有的杂项零件箱后,我找到了一个几年前为另一个项目购买的Sure蓝牙模块。为了原型制作,这个表面贴装模块已经连接到一个自制蚀刻的PCB上,带有排针,以便可以插入面包板。由于我没有热风返修站,我为最终项目订购了另一个GP-GC021模块。下面显示的模块是我最初开始使用的那个,而上面的照片显示了我最近获得的模块。
我决定使用PIC12F675作为主MCU,没有其他原因,只是因为我零件箱里有一个。我原本计划利用PIC的内部4MHz振荡器,但后来发现由于串行模块固定在9600波特,主系统时钟必须提升到8MHz以保持同步并以正确的速度传输数据。
与我所有的项目一样,原理图和PCB布局都是在Altium Designer中完成的。多年来,我尝试过几种不同的EDA(电子设计自动化)套件,包括Eagle、ExpressPCB和EdwinXP,但我发现Altium远胜于其他软件。如果你只是一个爱好者,Altium可能超出你的预算,但他们的学生许可非常棒;许多学院和大学拥有大量许可证甚至站点许可证。在Okanagan学院,我们非常幸运能够访问学院的浮动许可证,这允许学生在任何我们想要的计算机上使用Altium,无论我们是否在校园内。我应该澄清,虽然我不为Altium工作,但多年来我与CAD软件进行了许多史诗般的战斗;虽然Altium和我有过分歧,但总体而言,使用它是一种乐趣。
脚注:
- 原理图、固件和所有其他相关文件都包含在附带的ZIP存档中。
- 编程不是我的强项,因此固件是用PICBasic编写的。ZIP存档中有一个可直接烧录的HEX文件,但是如果你想修改固件,你需要拥有ProtonIDE的副本才能编译它。
- 如果你计划从附带的Gerber文件制作PCB,请注意F1(传感器VCC总线上的保险丝)的焊盘尺寸实际上太小了(抱歉)。
- 这里的所有内容均按原样提供,没有任何保修。
’****************************************************************
’* 蓝牙温度计 - R1 B23.BAS *
’****************************************************************
’ MCU 选择
Device = 12F675
’ 8.000MHz 晶体
XTAL = 8
’ 定义符号引脚参考
Symbol DQ = GPIO.0 ’ 单总线网络引脚
Symbol TX = GPIO.1 ’ 蓝牙 TX
Symbol RX = GPIO.2 ’ 蓝牙 RX
’ 配置熔丝:外部振荡器(高速),看门狗关闭,代码保护关闭
Config HS_OSC, WDT_OFF, CP_OFF
’ 定义变量
Dim temperature As Word
Dim C As Byte
Dim CPerD As Byte
Dim sample_count As Word
Dim sample_delay As Word
Dim tx_pace As Word
Dim temp_dec As Byte
Dim sign As Byte
’ 在每个字符传输之间插入小延迟以防止数据丢失
tx_pace = 80
’ 采样率
sample_delay = 10000
’ 将所有引脚设置为数字
ALL_DIGITAL = true
’ 设置引脚方向
Output TX
Input RX
’ 20秒启动延迟
DelayMS 20000
’ 显示“上电自检”信息
SerOut TX, 84, tx_pace, [13, 10, 10, 10, "蓝牙温度计 - 启动成功", 13, 10]
SerOut TX, 84, tx_pace, [13, 10, "硬件版本: R3.0"]
SerOut TX, 84, tx_pace, [13, 10, "固件版本: R1 B23"]
SerOut TX, 84, tx_pace, [13, 10, "采样间隔(秒): ", Dec sample_delay/1000, 13, 10]
’ SerOut 数据格式: SerOut (引脚)(波特模式(9600 8N1 反转))(节奏)[数据]
’ 空白行
SerOut TX, 84, tx_pace, [13,10,10,10]
’ 等待两秒
DelayMS 2000
’ 将采样计数器初始化为零
sample_count = 0
’ 打印“开始”向主机发出数据收集开始的信号
SerOut TX, 84, tx_pace, ["开始", 13, 10,10]
’ 主采样/传输循环
acquisition:
OWrite DQ, 1, fault, [$CC, $44] ’ 发送计算温度命令
’ 如果未找到单总线传感器,跳转到“故障”函数
’ OWrite 和 ORead 函数非常全面 - 详见 PICBasic 库
Repeat
DelayMS 50 ’ 等待转换完成
ORead DQ, 4, [C] ’ 从 DS18B20 读取计数器值
Until C <> 0
OWrite DQ, 1, [$CC, $BE] ’ 发送“读取暂存器”命令
ORead DQ, 2, [temperature.LowByte,temperature.HighByte, C, C, C, C, C, CPerD]
’ 判断值是正还是负;翻转符号
’ 位 8-15 为 1 表示负温度,0 表示正温度
If temperature.8=1 Then
’ 如果为负,则丢弃第一位,并反转值
temperature=(temperature.LowByte ^ $FF) >> 1
’ 如果 Count = 0 则递增 Temp
If C = 0 Then temperature = temperature + 1
’ 将符号改为负
sign = "-"
Else
’ 如果为正,则丢弃第一个字节
temperature = (temperature >> 1)
’ 并将符号值改为正
sign = "+"
’ 反转十进制值
temp_dec = 100 - temp_dec
EndIf
’ 每个 Count 是 1/16 度,因此 100/16 = 6.25,这是我们的十进制值(温度的)
temp_dec = (6.25 * C)
’ 递增采样计数器
sample_count = (sample_count + 1)
’ 通过蓝牙链路将数据传输到主机
’ 传输 "" 似乎可以防止数据丢失
SerOut TX, 84, tx_pace, [""]
’ 格式: 采样计数, 逗号, 符号, 温度整数, 小数点, 温度小数, "c"
SerOut TX, 84, tx_pace, [Dec sample_count, ", ", sign, Dec temperature, ".", Dec Dig temp_dec, 1, 0, "c", 13, 10]
’ 在发送下一个样本前等待指定时间
DelayMS sample_delay
’ 重新开始采样采集过程
GoTo acquisition
’ 如果未找到单总线传感器,第一个 OWRITE 命令将失败并跳转到这里指示故障
fault:
SerOut TX, 84, tx_pace, [13, 10, "错误: 检测到单总线网络故障 - 检查传感器接线", 13, 10]
DelayMS 1000
’ 重试 - 如果问题修复,返回正常操作
GoTo acquisition




这里还没有内容,您有什么问题吗?
电子电路资源推荐
- 通信原理+第7版+学习辅导与考研指导+曹丽娜+樊昌信+课后习题答案

来源:下载中心
- 扬声器系统设计手册第七版

来源:下载中心
- 二极管工作原理

来源:大学堂
- Keysight 示波器基础培训

来源:大学堂
- 电路的基本物理量:电流,电压,电位,电动势,电功率

来源:电路图
- 戴维宁定理:概念介绍及其求解过程

来源:电路图
推荐帖子 最新更新时间:2026-03-25 20:36
- VxWorks+VmWare下使用串口的问题
- X86平台下用VxWorks编程控制串口,跟硬件最相关的就是对串口的读写操作。自己编了一个小的读写程序,在机器上跑不通。具体表现为:写操作无效(另一方用串口调试助手收不到数据),但是write()返回值正常,也能看到VmWare上的串口设备有闪动;读操作是无限循环的,只要有数
adingx
实时操作系统RTOS
- 彩色液晶接口电路设计及触摸屏的编程与调试
- 基于TFT6448BS-5.7设计的 彩色液晶接口电路设计及触摸屏的编程与调试 谢谢!!!!分享!!! 感谢支持 回复 沙发 幸运十一月 的帖子 谢谢分享。偶来顶顶顶,楼主加油,赞一个 回复 楼主 gxkj001 的帖子 谢谢斑竹的支持 回复 4楼 鑫海宝贝 的帖
gxkj001
单片机
- 《Google Android开发技术》自我推荐
- 《 Google Android 开发技术》,西电出版,作者:张勇,2011.10 内 容 简 介 Android 系统是安装在智能移动设备上的嵌入式操作系统,包括 Linux 内核、系统库与 Java 运行时、应用程序框架和应用程序层等
zhnyong
Linux开发
- 为什么程序老是进入死循环
- 这个是我根据一个lm3s_lib_interrupt.pdf,写的一个关于LM3S9B96按键中断的程序,可是进不了中断,不过按键查询可以。按键中断却不行,为什么呢?哪个大侠帮忙看下。 为什么程序老是进入死循环 1.中断配置 2.中断向量表修改。 做好了是没有问题的。。。
zzgezi
微控制器 MCU
- 各位大侠。。本人是新手求助一个关于温室大棚湿度温度测控系统设计
- 基于单片机的温室大棚温湿度测控系统设计 使用51系列单片机STC89S51与智能温度传感器芯片DS18B20(查一下大棚温度)、湿度传感器(查一下型号,注意大棚湿度范围)液晶模块1602(可用别的型号)及外围电路等完成设计与实现; 功能是实时采集温度、湿度信号,进行A/D转换,单
suye_sunny
单片机
- 用LM3S8962 做的首款产品进入调试阶段
- 背景: 使用LM3S8962做的光电曲线测试产品,主要使用LM3S8962的串口,SSI 接口和I2C 接口,网口备份用. 目前原理图和PCB 都已经完成, PCB板子也已经回来了. 经过一天辛勤劳动,扳子焊接完毕. 用于我没有数码相机,图片就上不了 1. 汇报一下,从北
eeleader
微控制器 MCU
- freescale codewarrior的make和debug按钮经常不起作用?
- RL-RTX库函数延时等待函数
- 堪称一绝的键盘扫描方法
- MSP430竞争对手基准测试
- 移植Virtual_COM_Port[急]
- ad9850头文件
- 430串口问题求指教
- 带“救生圈”的钥匙链
- 重要
- 摄像头如何确定目标靶上点光斑位置
- 单相正弦脉宽调制逆变器的设计
- 电子竞赛TI杯
- msp430f149 的ADC12
- 液晶汉字取模方法
- 基于zigbee套件,怎么具体构建一局域网络
- 用可控硅做了一个三相电机正反转控制电路
- 无线网络取代PLC通信实际遇到的问题。
- LPC1114中的CT32B0_MAT2与CT16B1_CAP0都是具体怎么解释啊
- 长见识了,原来单片机可以直接驱动继电器——
- LM3S8962跑UCOSII遇到小问题#######
- VCNL4020C 高分辨率数字生物传感器的典型应用,用于具有 I2C 接口的可穿戴应用
- SY58035U,SY58034 评估板,1:6 CML 和 LVPECL 扇出缓冲器,带 2:1 输入多路复用器
- LT1307BIS8 外部控制突发模式操作的典型应用电路
- 使用 Analog Devices 的 LT1086CT-5 的参考设计
- MIC5380-PPYFT EV,MIC5380 高性能双路 150mA LDO 评估板
- AR0835HS3C12SUAAH3-GEVB:8 MP 1/3" CIS HB
- 使用 STMicroelectronics 的 L4940P85 的参考设计
- 使用 STMicroelectronics 的 L6562 的参考设计
- 手机APP远程控制,智能家居监测、智能控制系统(STM32L4、服务器、安卓源码)
- NCV33172DR2G 单+5V 交流耦合同相放大器典型应用







京公网安备
11010802033920号