RTduino+sht31温湿度传感器

本次博客使用的是STM32F103C8T6,因为该BSP已经对接好RTduino了可以直接上手使用。

一、RTduino简介

RTduino是RT-Thread实时操作系统的Arduino生态兼容层,为RT-Thread社区的子社区、Arduino开源项目的下游项目,旨在兼容Arduino社区生态来丰富RT-Thread社区软件包生态(如上千种分门别类的Arduino库,以及Arduino社区优秀的开源项目),并降低RT-Thread操作系统以及与RT-Thread适配的芯片的学习门槛。通过RTduino,可以让用户使用Arduino的函数、编程方法,轻松地将RT-Thread和BSP使用起来。用户也可以直接使用Arduino第三方库(例如传感器驱动库、算法库等)直接用在RT-Thread工程中,极大地补充了RT-Thread社区生态。

本软件包可以在RT-Thread Studio IDE和Keil-MDK编译环境下运行,但是,因为Arduino的库都是基于GCC环境开发的,因此强烈推荐使用RT-Thread Studio IDE运行。

参考链接:https://github.com/RTduino/RTduino

二、在C8T6上使用RTduino读取传感器sht31

打开兼容框架:

修改kconfig,由于C8T6flash只有64k,有些功能就不得不裁剪。

下一步就是去软件包里面拉去sht31的软件包(同时也是arduino那边的传感器库)。

然后保存后编译一下工程,到这一步基本上是不会报错的,如果报错的话就回头看看前面是否按照步骤来的。然后来到代码编写环节,不同于传统的RTthread编写方式,代码编写需要在arduino_main.c文件下进行。

这时来到packages文件下找到刚刚拉取的sht31软件包。将代码复制粘贴到arduino_main.cpp文件中去,然后开始修改。

主要是修改一下波特率,在arduino给的demo下是初始化的9600,但是我们RTthread使用的是115200,为了不乱码就不给Serial.begin()参数这样就使用RTthread的默认波特率。

最后编译一下代码,同时我也将最终代码放在下面:

/***************************************************
  This is an example for the SHT31-D Humidity & Temp Sensor

  Designed specifically to work with the SHT31-D sensor from Adafruit
  ----> https://www.adafruit.com/products/2857

  These sensors use I2C to communicate, 2 pins are required to
  interface
 ****************************************************/

#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"

bool enableHeater = false;
uint8_t loopCnt = 0;

Adafruit_SHT31 sht31 = Adafruit_SHT31();

void setup() {
  Serial.begin();

//  while (!Serial)
//    delay(10);     // will pause Zero, Leonardo, etc until serial console opens

  Serial.println("SHT31 test");
  if (! sht31.begin(0x44)) {   // Set to 0x45 for alternate i2c addr
    Serial.println("Couldn't find SHT31");
    while (1) delay(1);
  }

  Serial.print("Heater Enabled State: ");
  if (sht31.isHeaterEnabled())
    Serial.println("ENABLED");
  else
    Serial.println("DISABLED");
}


void loop() {
  float t = sht31.readTemperature();
  float h = sht31.readHumidity();

  if (! isnan(t)) {  // check if 'is not a number'
    Serial.print("Temp *C = "); Serial.print(t); Serial.print("\t\t");
  } else {
    Serial.println("Failed to read temperature");
  }

  if (! isnan(h)) {  // check if 'is not a number'
    Serial.print("Hum. % = "); Serial.println(h);
  } else {
    Serial.println("Failed to read humidity");
  }

  delay(1000);

  // Toggle heater enabled state every 30 seconds
  // An ~3.0 degC temperature increase can be noted when heater is enabled
  if (loopCnt >= 30) {
    enableHeater = !enableHeater;
    sht31.heater(enableHeater);
    Serial.print("Heater Enabled State: ");
    if (sht31.isHeaterEnabled())
      Serial.println("ENABLED");
    else
      Serial.println("DISABLED");

    loopCnt = 0;
  }
  loopCnt++;
}

最终运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式路上的流浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值