[Documentation] [TitleIndex] [WordIndex

(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

DHT Humidity and Temperature Sensor

Description: In this tutorial, we will use a Mbed and a DHT Humidity and Temperature Sensor.

Tutorial Level: BEGINNER

Next Tutorial: Motor Shield Example

  Show EOL distros: 

rosserial allows you to easily integrate Mbed-based hardware with ROS. This tutorial will explain how to use a DHT Humidity and Temperature Sensor with an Mbed.

You will need an Mbed, a Humidity and Temperature Sensor, and a way to connect your Sensor to your Mbed to your Mbed such as a breadboard, protoboard or Grove Base Shield.

The Code

Open the Humidity and Temperature Sensor example placed on your previously downloaded rosserial/rosserial_mbed/examples directory, and open the GrovePIRMotionSensor.cpp file in your favorite text editor:

   1 /*
   2  * rosserial Temperature and Humidity Sensor Example
   3  *
   4  * This tutorial demonstrates the usage of the
   5  * Seeedstudio Temperature and Humidity Grove module
   6  * http://www.seeedstudio.com/wiki/Grove_-_Temperature_and_Humidity_Sensor
   7  *
   8  * Source Code Based of:
   9  * https://developer.mbed.org/teams/Seeed/code/Seeed_Grove_Temp_Humidity_Example/
  10  */
  11 
  12 #include "mbed.h"
  13 #include "DHT.h"
  14 #include <ros.h>
  15 #include <sensor_msgs/Temperature.h>
  16 #include <sensor_msgs/RelativeHumidity.h>
  17 
  18 ros::NodeHandle  nh;
  19 
  20 sensor_msgs::Temperature temp_msg;
  21 sensor_msgs::RelativeHumidity humidity_msg;
  22 ros::Publisher pub_temp("temperature", &temp_msg);
  23 ros::Publisher pub_humidity("humidity", &humidity_msg);
  24 
  25 Timer t;
  26 #ifdef TARGET_LPC1768
  27 DHT sensor(p9, AM2302);
  28 #elif defined(TARGET_KL25Z) || defined(TARGET_NUCLEO_F401RE)
  29 DHT sensor(D6, AM2302);
  30 #elif defined(TARGET_NUCLEO_F401RE)
  31 DHT sensor(A6, AM2302);
  32 #else
  33 #error "You need to specify a pin for the sensor"
  34 #endif
  35 
  36 int main()
  37 {
  38   int error = 0;
  39   t.start();
  40 
  41   nh.initNode();
  42   nh.advertise(pub_temp);
  43   nh.advertise(pub_humidity);
  44 
  45   long publisher_timer = 0;
  46   temp_msg.header.frame_id = "/base_link";
  47   humidity_msg.header.frame_id = "/base_link";
  48 
  49   while (1)
  50   {
  51 
  52     if (t.read_ms() > publisher_timer)
  53     {
  54       error = sensor.readData();
  55       if (0 == error)
  56       {
  57         temp_msg.temperature = sensor.ReadTemperature(CELCIUS);
  58         temp_msg.header.stamp = nh.now();
  59         pub_temp.publish(&temp_msg);
  60 
  61         humidity_msg.relative_humidity = sensor.ReadHumidity();
  62         humidity_msg.header.stamp = nh.now();
  63         pub_humidity.publish(&humidity_msg);
  64       }
  65       publisher_timer = t.read_ms() + 1000;
  66     }
  67     nh.spinOnce();
  68   }
  69 }

Compiling and uploading the Code

As seen on the previous tutorial, you must compile the source code by using the makefile in order to generate the .bin file that will be uploaded later to your MBED board. This is no different from uploading any other mbed binary.

Launching the App

Launch roscore

$ roscore

Run the serial node with the right serial port corresponding to your MBED board

$ rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0

$ rosrun rosserial_python serial_node.py /dev/ttyUSB0

Now watch the sensor's value on the pushed topic

$ rostopic echo /temperature

or

$ rostopic echo /humidity


2019-11-09 13:12