【编程环境】
1、RT-Thread stiduo
2、RTduino
【硬件】
1、HMIBoard开发板
2、ssd1306 OLED显示屏
3、sht31温湿度计
【实现步骤】
1、在工程目录下面打env配置开启RTuino下面的sensor的sht31。
2、打开RTuino下面的ssd1306
3、然后保存参数,使用pkg --update来更新工程包:
4、使用RT-Thread Studio打开工程,如果不是第一次还需要打开rasc重新生成一下工程:
5、添加路径到工程中,由于是在env下面生成的,RTunio新添加进来的工程没有包含到编译工程中去。按下图所示,分别添加c\c++的文件包含路径。
6、复制SHT31test.ino中的所有内容到arduino_main.cpp中去。
7、添加ssd1306的宏定义、头文件以及初始的代码到工程中;
//ssd1306 #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) #define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //end ssd1306
8、在setup中添加ssd1306的初始化以及显示LOGO函数,函数中display.begin是初始化ssd1306。
//start ssd1306 // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } // Show initial display buffer contents on the screen -- // the library initializes this with an Adafruit splash screen. display.display(); delay(2000); // Pause for 2 seconds // Clear the buffer display.clearDisplay(); display.display(); display.setTextSize(2); // Draw 2X-scale text display.setTextColor(SSD1306_WHITE); display.setCursor(10, 0); display.println(F("SHT31DEMO")); display.display(); // Show initial text
9、在loop中,我们获取sht31的数据,如果成功就显示到oled屏上面:
void loop() { float t = sht31.readTemperature(); float h = sht31.readHumidity(); display.clearDisplay(); display.setCursor(10, 0); display.println(F("SHT31DEMO")); if (! isnan(t)) { // check if 'is not a number' Serial.print("Temp *C = "); Serial.print(t); Serial.print("\t\t"); display.setCursor(2, 20); display.print("Temp:"); display.println(t,2); } else { Serial.println("Failed to read temperature"); } if (! isnan(h)) { // check if 'is not a number' Serial.print("Hum. % = "); Serial.println(h); display.setCursor(16, 40); display.print("Hum:"); display.println(h,2); } else { Serial.println("Failed to read humidity"); } display.display(); 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、实验效果: