ESP8266 NodeMCU物聯(lián)網(wǎng)開發(fā)板同時(shí)連接1.44寸TFT, DHT11, HX711, HC-SR04傳感器

效果:



(顯示屏內(nèi)容: 序號(hào): 25, 距離:196.74cm, 重量0.095kg, 溫度: 23*C, 濕度:82H)

開發(fā)所需硬件:

1.ESP8266-NodeMCU-Lua-V3 CH340開發(fā)板
2.TFT 1.44寸液晶顯示屏
3.DHT11 溫濕度傳感器
4.HX711 5KG壓力稱重傳感器
5.HC-SR04 超聲波距離傳感器

(開發(fā)工具采用的是Arduino IDE)

接線方法:

運(yùn)行代碼:

//***************HC-SR04超聲波傳感器****************************
const int TrigPin = 3;  //SD1/S1 (RX GPIO3)
const int EchoPin = 15;  //D8 GPIO15
float duration; //聲波傳輸時(shí)間
float distance; //距離

//****************DHT11溫濕度傳感器*****************************
#include <SimpleDHT.h>
const int DHT11_PIN = D0; //接D0 GPIO16
byte temperature = 0; //溫度
byte humidity = 0;    //濕度
String thStr = "null"; //溫濕度字符串
SimpleDHT11 dht11(DHT11_PIN);

//**************HX711壓力稱重**********************************
#include "HX711.h"
const int LOADCELL_DOUT_PIN = D4; // D4 GPIO2
const int LOADCELL_SCK_PIN = 3; // RX GPIO3
HX711 loadcell;
const long LOADCELL_DIVIDER = 604105; //校準(zhǔn)參數(shù), 以kg為單位校準(zhǔn)的,每個(gè)稱重傳感器不一樣,需要自行校準(zhǔn)
float weight = 0; //讀取的重量

//******************1.44寸TFT顯示屏****************************
#include <Adafruit_GFX.h>    
#include <Adafruit_ST7735.h> 
#include <SPI.h>
#define TFT_CS     D1   //D1 GPIO5
#define TFT_RST    D2   //D2 GPIO4
#define TFT_DC     D3   //D3 GPIO0
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);
int i = 0;

void setup() {
  Serial.begin(9600); //設(shè)置輸出串口波特率
  Serial.println("初始化中...");
  pinMode(TrigPin, OUTPUT); //初始超聲波傳感器,設(shè)置trigPin引腳為輸出
  pinMode(EchoPin, INPUT); // 設(shè)置echoPin引腳為輸入
  delay(500);
  
  tft.initR(INITR_144GREENTAB); //初始1.44寸顯示屏
  tft.fillScreen(ST7735_BLACK); //刷屏, 設(shè)置背景黑色
  delay(500);
  
  loadcell.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); //初始稱重傳感器
  loadcell.set_scale(LOADCELL_DIVIDER);
  loadcell.tare();  //毛皮重量
  delay(2000);
}

void loop() {
  tft.fillScreen(ST7735_BLACK); //刷屏, 重新顯示
  
  printToTFT(20, 10, 1, ST7735_RED, "num: "+String(i)); //打印顯示自增數(shù)字
  i++;
  delay(500);

  distance = getDistance(); //獲取超聲波的距離
  printToTFT(20, 20, 1, ST7735_RED, "Distance: "+String(distance,1)+"cm"); //打印顯示距離
  delay(500);
  
  weight = getWeight();  //獲取在傳感器上的重物重量 
  printToTFT(20, 30, 1, ST7735_RED, "Weight: "+String(getWeight(), 3)+"kg"); //打印顯示重量
  delay(500);  //延時(shí)500ms

  thStr = getTemperatureAndHumidity(); //獲取溫濕度傳感器的值
  printToTFT(20, 40, 1, ST7735_RED, "T-H: "+thStr); //打印顯示溫濕度
  delay(500);  //延時(shí)500ms
}

void printToTFT(int x, int y, int textSize, uint16_t color, String text){ //打印到TTF顯示屏的函數(shù)
  tft.setCursor(x, y);         //設(shè)置光標(biāo)的位置
  tft.setTextSize(textSize);   //文字大小
  tft.setTextColor(color);     //文字顏色
  tft.print(text);             //打印要顯示的內(nèi)容
}

float getWeight(){ //稱重函數(shù), 獲取重量
    if (loadcell.wait_ready_timeout(3000)) { //非阻塞模式
        return loadcell.get_units(10);
    } else {
        return weight; //如果延遲3s未獲取到值, 就返回上次成功獲取到的值
    }
}

float getDistance(){ //獲取CH-SR04超聲波的距離
  digitalWrite(TrigPin, LOW); // Clears the trigPin
  delayMicroseconds(2);
  digitalWrite(TrigPin, HIGH);// Sets the trigPin on HIGH state for 10 ms
  delayMicroseconds(10);
  digitalWrite(TrigPin, LOW);
  duration = pulseIn(EchoPin, HIGH); //讀取聲波來(lái)回的時(shí)間    
  return duration*0.034/2.0; //時(shí)間*聲速 / 2得到距離
 }

 String getTemperatureAndHumidity(){ //獲取DHT11的溫度和濕度
  int waitTime = 0;
  while(dht11.read(&temperature, &humidity, NULL) != SimpleDHTErrSuccess){ //如果讀取失敗
      delay(100); waitTime+=100; //等待100ms再重新讀取
      if(waitTime > 2000 ){ //如果超過(guò)2秒未獲取到
      return thStr; //返回上次成功的讀數(shù)值, 避免阻塞
    }
  }
  return String((int)temperature) + "*c " + String((int)humidity) + "H";
 }

提示:

^仁唷6ハ肌弯屈!不建議一個(gè)ESP8266連接這么多傳感器穿扳,因?yàn)闀?huì)導(dǎo)致供電不足不穩(wěn)定买置,你也可以少連接一些傳感器移除部分代碼保證穩(wěn)定性。
  1. 代碼中的庫(kù)文件要正確導(dǎo)入.
  2. EPS8266不建議使用GPIO6 - GPIO11的引腳, 因?yàn)樗鼈冞B接SD閃存, 但由于引腳不夠用, 所以超聲波傳感器接了一個(gè)S1/SD1引腳, 但是代碼中的GPIO值是3, 由于引腳不夠用甚至稱重傳感器也接了一個(gè)RX引腳, 曲線救國(guó).
參考: Github倉(cāng)庫(kù) 下的案例28-ESP8266-Sensors

(提示: 如果發(fā)現(xiàn)代碼可以優(yōu)化, 歡迎提issue改進(jìn))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市莱褒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荒叼,老刑警劉巖轿偎,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異被廓,居然都是意外死亡贴硫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門伊者,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)英遭,“玉大人,你說(shuō)我怎么就攤上這事亦渗⊥谥睿” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵法精,是天一觀的道長(zhǎng)多律。 經(jīng)常有香客問(wèn)我,道長(zhǎng)搂蜓,這世上最難降的妖魔是什么狼荞? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮帮碰,結(jié)果婚禮上相味,老公的妹妹穿的比我還像新娘。我一直安慰自己殉挽,他們只是感情好丰涉,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著斯碌,像睡著了一般一死。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傻唾,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天投慈,我揣著相機(jī)與錄音,去河邊找鬼冠骄。 笑死伪煤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的猴抹。 我是一名探鬼主播带族,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蟀给!你這毒婦竟也來(lái)了蝙砌?” 一聲冷哼從身側(cè)響起阳堕,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎择克,沒(méi)想到半個(gè)月后恬总,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肚邢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年壹堰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骡湖。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贱纠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出响蕴,到底是詐尸還是另有隱情谆焊,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布浦夷,位于F島的核電站辖试,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏劈狐。R本人自食惡果不足惜罐孝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肥缔。 院中可真熱鬧莲兢,春花似錦、人聲如沸辫继。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)姑宽。三九已至,卻和暖如春闺阱,著一層夾襖步出監(jiān)牢的瞬間炮车,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工酣溃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘦穆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓赊豌,卻偏偏與公主長(zhǎng)得像扛或,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子碘饼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容