将温度传感器获取室温显示在手机APP上

将温度传感器获取室温显示在手机APP上

首先,该功能是基于手机通过wifi单片机功能上的,我们在原来的android项目中添加数据接收的代码与数据显示的控件,再通过线程不断地读取接收到的数据,已达到环境温度的实时显示。

1.android端布局的更改

增加一个按钮和一个TextView
在这里插入图片描述

2.android代码增加

test.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (out!=null){
                    mHandler = new Handler();
                    //相当于定时器,每隔2s执行一次该线程
                    runnable = new Runnable() {
                        @Override
                        public void run() {
                            try {
                                out.print("3");
                                out.flush();
                                InputStream in = mSocket.getInputStream();
                                byte[] buffer = new byte[in.available()];
                                in.read(buffer);
                                String msg = new String(buffer);
                                display.setText("当前室温:"+msg+"°");
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            mHandler.postDelayed(this, 5000); //相当于定时器,每隔5s执行一次该线程
                        }
                    };
                    mHandler.post(runnable);
                }
            }
        });

3.单片机接线

在这里插入图片描述
连接wifi模块之后(可以参考单片机端
温度传感器使用的是18b20,如果接错线,很有可能会烧掉,务必将有字一面对自己
左 —— GND
中 —— 2
右 —— 5V
PS:中右针脚和杜邦线需要连1K电阻

4.单片机代码

在之前代码的判断条件中增加一个if语句

else if (comdata.startsWith("3", 11))
      {
        sensors.requestTemperatures(); // 发送命令获取温度
        Serial.print("当前温度: ");
        Serial.println(sensors.getTempCByIndex(0)); 
        delay(500); 
        wifi.println("AT+CIPSEND=0,5");
        delay(500);
        wifi.println(sensors.getTempCByIndex(0));
      }

android端输入
服务器地址:192.168.4.1
端口号:8080

  • 1
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用STM32板上的温度传感器测试温度,并通过LED的数量提示温度高低,需要编写以下单片机程序: 首先,需要配置STM32的引脚和定时器,以及温度传感器的接口。 接下来,在主函数中创建一个循环,不断进行温度测试和LED数量更新。 在每次循环开始时,通过读取温度传感器的数值获取当前温度。可以使用ADC(Analog-to-Digital Converter)模块来将模拟输入值转换为数字值。 然后,进行温度范围判断。根据实际需求,可以设定几个温度范围,比如低温、室温、高温。 通过比较当前温度和设定温度范围的阈值,确定LED的数量。可以设定不同数量的LED来表示不同的温度范围。例如,低温区域使用1个LED,室温区域使用2个LED,高温区域使用3个LED等。 最后,将确定好的LED数量输出到STM32板上的LED引脚上。通过控制LED引脚的电平状态,点亮相应数量的LED。 以上就是实现利用STM32板上的温度传感器,测试温度并通过LED的数量提示温度高低的单片机程序的基本流程。具体的代码实现需要根据具体的开发板型号、温度传感器类型以及需要设定的温度范围等因素进行具体调整。 ### 回答2: 利用STM32板上的温度传感器进行温度测试,并通过LED的数量来提示温度的高低,即温度越高,点亮的LED越多。下面是一个示例的单片机程序。 首先,我们需要初始化STM32板上的温度传感器和LED。我们可以使用HAL库来简化初始化过程。接下来,我们可以创建一个循环,在循环中不断读取温度传感器数据,并根据温度值控制LED的亮灭。 程序的主要流程如下: 1. 初始化STM32板上的温度传感器和LED。 2. 创建一个循环,不断读取温度传感器数据。 3. 根据读取到的温度值,确定需要点亮多少个LED。 4. 通过设置LED的状态,点亮或熄灭相应数量的LED。 5. 延迟一段时间,继续下一次循环。 以下是一个简单的示例程序: ``` #include "stm32f4xx_hal.h" // 定义LED引脚的GPIO端口和引脚号 #define LED_GPIO_PORT GPIOA #define LED_PIN_1 GPIO_PIN_0 #define LED_PIN_2 GPIO_PIN_1 #define LED_PIN_3 GPIO_PIN_2 // 定义温度传感器的ADC通道和周期 #define TEMP_SENSOR_CHANNEL ADC_CHANNEL_TEMPSENSOR #define TEMP_SENSOR_PERIOD 1000 // 初始化温度传感器和LED void initTemperatureSensorAndLED(void) { // 初始化ADC通道 ADC_ChannelConfTypeDef sConfig = {0}; sConfig.Channel = TEMP_SENSOR_CHANNEL; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES; HAL_ADC_ConfigChannel(&hadc1, &sConfig); // 设置GPIO引脚为输出模式 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = LED_PIN_1 | LED_PIN_2 | LED_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct); } int main(void) { // 初始化STM32系统 HAL_Init(); // 配置系统时钟 SystemClock_Config(); // 初始化温度传感器和LED initTemperatureSensorAndLED(); while (1) { // 读取温度传感器数据 HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1, TEMP_SENSOR_PERIOD); uint32_t tempValue = HAL_ADC_GetValue(&hadc1); // 根据温度值确定需要点亮的LED数量 uint8_t ledCount = 0; if (tempValue > 2000) { ledCount = 3; } else if (tempValue > 1000) { ledCount = 2; } else { ledCount = 1; } // 设置LED的状态,点亮或熄灭相应数量的LED HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN_1, (ledCount >= 1) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN_2, (ledCount >= 2) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(LED_GPIO_PORT, LED_PIN_3, (ledCount >= 3) ? GPIO_PIN_SET : GPIO_PIN_RESET); // 延迟一段时间,继续下一次循环 HAL_Delay(1000); } } ``` 以上是一个简单的程序示例,根据读取到的温度值可以控制LED的亮灭,以提供温度的高低提示。实际应用中,可以根据需求进行修改和优化。 ### 回答3: 利用STM32板上的温度传感器进行温度测试,并通过LED的数量来提示温度的高低,需要编写一个单片机程序。 首先,我们需要初始化温度传感器和LED,并将温度传感器连接到单片机的某个引脚上。然后,在主循环中,我们可以通过读取温度传感器的数值来获取当前温度。 接着,可以设定一些温度阈值来判断当前温度的高低。例如,假设当温度超过30℃时,我们认为温度较高。根据设定的阈值,我们可以使用if-else语句将当前温度分成几个等级,并相应地控制LED的亮灭。 对应不同的温度等级,我们可以设置不同数量的LED点亮。例如,当温度低于20℃时,可以点亮一个LED,当温度介于20℃和25℃之间时,可以点亮两个LED,以此类推。 最后,我们需要在程序中编写控制LED亮灭的代码。可以使用STM32的GPIO库函数来控制LED引脚的电平状态,以实现LED的点亮。具体的代码实现可以参考STM32的开发手册和相关资料,根据板子型号和传感器类型进行调整。 综上所述,通过利用STM32板上的温度传感器,我们可以设计一个温度测试程序,通过LED的数量提示温度的高低。这样,当温度升高时,LED点亮的数量也会相应增加,从而实现对温度变化的有效提示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值