สารบัญ:

WiFi Temperature Logger (พร้อม ESP8266): 11 ขั้นตอน (พร้อมรูปภาพ)
WiFi Temperature Logger (พร้อม ESP8266): 11 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: WiFi Temperature Logger (พร้อม ESP8266): 11 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: WiFi Temperature Logger (พร้อม ESP8266): 11 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: การใช้เซ็นเซอร์ DHT11 อ่านค่าอุณหภูมิและความชื้น | JAKK DIY 2024, กรกฎาคม
Anonim
Image
Image
วัสดุ
วัสดุ

สวัสดี ดีใจที่ได้พบคุณที่นี่ ฉันหวังว่าในคำแนะนำนี้คุณจะพบข้อมูลที่เป็นประโยชน์ โปรดส่งข้อเสนอแนะ คำถาม … ต่อไปนี้คือข้อมูลพื้นฐานและภาพรวมคร่าวๆ ของโครงการ สำหรับผู้ใช้มือถือ: วิดีโอแจ้งให้เราทราบว่าคุณคิดอย่างไรกับโครงการในส่วนความคิดเห็น ขอบคุณ ฉันเพิ่งซื้อบอร์ด NodeMcu (ตาม esp8266) เพื่อลองใช้ดู นี่ไม่ใช่โปรเจ็กต์ขั้นสูงจริงๆ แต่มันใช้งานได้และเป็นสิ่งที่ฉันต้องการ ไม่เป็นไร ฟังก์ชันหลักสำหรับเครื่องบันทึกข้อมูลนี้คือการรวบรวมอุณหภูมิและบันทึกลงในเซิร์ฟเวอร์ ซึ่งช่วยให้ผู้ใช้สามารถตรวจสอบข้อมูลและกราฟออนไลน์ได้ แม้ว่าจะไม่ได้อยู่ที่ตำแหน่งเดียวกันกับตัวบันทึก (เช่น สถานีตรวจอากาศ) คุณสมบัติที่มีประโยชน์อีกอย่างหนึ่งคือการอัปเดต OTA ที่รวมอยู่ในโค้ดที่ให้ผู้ใช้อัปเดตและปรับแต่งซอฟต์แวร์ได้อย่างง่ายดาย ฉันจะวิเคราะห์เซ็นเซอร์สองตัวและวิธีการได้มาที่เกี่ยวข้องเพื่อสร้างสมดุลระหว่างข้อดีและข้อเสียทั้งหมด

สปอยเลอร์: หลังจากการทดสอบเล็กน้อย ฉันพบว่าเซ็นเซอร์ดิจิทัลอย่าง DS18B20 เป็นทางออกที่ดีที่สุด เพราะมันให้ความเสถียรและความแม่นยำสูงกว่า มันกันน้ำอยู่แล้วและมีสาย

ขั้นตอนที่ 1: วัสดุ

วัสดุ
วัสดุ
วัสดุ
วัสดุ
วัสดุ
วัสดุ

นี่เป็นโครงการขั้นต่ำที่มีส่วนประกอบภายนอกเพียงเล็กน้อย สำหรับรายการ BOM นี้จะสั้นมาก อย่างไรก็ตามเรามาดูกันว่าวัสดุใดที่ร้องขอ:

  • NodeMcu V3 (หรือตัวประมวลผล ESP8266 μที่เข้ากันได้);
  • RGB นำ (ขั้วบวกทั่วไป);
  • ตัวต้านทานสำหรับนำ (1x10Ω, 1x22Ω, 1x100Ω, 1x10kΩ)
  • DS18B20 (เครื่องวัดอุณหภูมิแบบรวมสูงสุด);
  • LM35 (เทอร์โมมิเตอร์ Texas Instrument);
  • แบตเตอรี่ภายนอก (อุปกรณ์เสริม);
  • เคเบิ้ล;
  • ตัวเชื่อมต่อ (เพื่อให้ "ขั้นสูง" มากขึ้น);
  • กล่อง (ไม่จำเป็น อีกครั้งเพื่อให้ "ขั้นสูง" มากขึ้น);
  • ที่ยึดไฟ LED (อุปกรณ์เสริม);

หมายเหตุ: อย่างที่ฉันบอกไป คุณต้องเลือกวิธีใดวิธีหนึ่งจากสองวิธี หากคุณเลือกเทอร์โมมิเตอร์ LM35 คุณจะต้องมีส่วนประกอบอื่นๆ สองสามอย่าง:

  • อัตตินี่45/85;
  • โปรแกรมเมอร์ AVR (หรือ Arduino เป็น ISP);
  • ตัวต้านทาน (1x1kΩ, 1x2kΩ, 1x10kΩ, 1x18kΩ)
  • ขั้วต่อแถบ 2.54 มม. (อุปกรณ์เสริม)
  • ไดโอด (2x1N914)
  • Perfboard หรือ PCB;

ขั้นตอนที่ 2: การเลือกเซ็นเซอร์

การเลือกเซ็นเซอร์
การเลือกเซ็นเซอร์

การเลือกเซ็นเซอร์อาจเป็นขั้นตอนที่ยาก: วันนี้มีทรานสดิวเซอร์จำนวนมาก (TI มีส่วนประกอบที่แตกต่างกัน 144 ชิ้น) ทั้งแบบแอนะล็อกและดิจิทัลที่มีช่วงอุณหภูมิ ความแม่นยำ และตัวเรือนต่างกัน เซ็นเซอร์แบบอะนาล็อก (ชิ้นส่วน TI มีจำหน่าย 46 ชิ้น):ข้อดี:

  • เครื่องบันทึกข้อมูลสามารถเปลี่ยนจากอุณหภูมิเป็นปริมาณอื่นได้อย่างง่ายดาย (แรงดัน กระแส …);
  • อาจจะถูกกว่าเล็กน้อย
  • ใช้งานง่ายเพราะไม่ต้องการไลบรารี่พิเศษใดๆ

จุดด้อย:

  • ต้องใช้ ADC (ที่สามารถส่งผลต่อความแม่นยำของการวัด) และส่วนประกอบภายนอกอื่นๆ เนื่องจาก esp8266 มี ADC เพียงตัวเดียว (และไม่ถูกต้องจริงๆ) ฉันจึงขอแนะนำให้ใช้ตัวภายนอก
  • ต้องการสายเคเบิลเฉพาะที่มีการปฏิเสธสัญญาณรบกวน เนื่องจากแรงดันไฟฟ้าเหนี่ยวนำใดๆ สามารถเปลี่ยนผลลัพธ์ได้

หลังจากครุ่นคิดเล็กน้อย ฉันตัดสินใจใช้ LM35 ซึ่งเป็นเซ็นเซอร์เชิงเส้นพร้อมตัวประกอบสเกล +10mV/°C ที่มีความแม่นยำ 0.5°C และกระแสไฟต่ำมาก (ประมาณ 60uA) ที่มีแรงดันไฟฟ้าทำงานตั้งแต่ 4V ถึง 30V สำหรับรายละเอียดเพิ่มเติม ฉันแนะนำให้ดูแผ่นข้อมูล: LM35

เซ็นเซอร์ดิจิตอล (แนะนำเป็นอย่างยิ่ง)ข้อดี:

จำเป็นต้องมีส่วนประกอบภายนอกเกือบทุกชนิด

ADC แบบบูรณาการ

จุดด้อย:

ขอไลบรารีหรือซอฟต์แวร์ถอดรหัสสัญญาณดิจิทัล (I2C, SPI, Serial, One Wire, …);

แพงมาก;

ฉันเลือก DS18B20 เพราะพบชุดเซ็นเซอร์กันน้ำ 5 ชุดใน Amazon และเนื่องจากมีการบันทึกไว้อย่างกว้างขวางบนอินเทอร์เน็ต คุณสมบัติหลักคือการวัด 9-12 บิต, บัส 1 สาย, แรงดันไฟฟ้า 3.0 ถึง 5.5, ความแม่นยำ 0.5°C อีกครั้งสำหรับรายละเอียดเพิ่มเติมที่นี่คือเอกสารข้อมูล: DS18B20

ขั้นตอนที่ 3: LM35

LM35
LM35
LM35
LM35
LM35
LM35

มาวิเคราะห์ว่าฉันใช้งาน ADC ภายนอกและคุณสมบัติอื่นๆ สำหรับเทอร์โมมิเตอร์ LM35 ได้อย่างไร ฉันพบสายเคเบิลที่มีสายไฟสามเส้น สายหนึ่งมีฉนวนและอีกสองเส้นไม่มี ฉันตัดสินใจเพิ่มตัวเก็บประจุแบบแยกส่วนเพื่อรักษาเสถียรภาพของแรงดันไฟจ่ายใกล้กับเซ็นเซอร์ ในการแปลงอุณหภูมิแอนะล็อกเป็นดิจิตอล ฉันใช้ไมโครโปรเซสเซอร์ Attiny85 ในแพ็คเกจ dip8 (โปรดดูข้อมูลเพิ่มเติมอีกครั้งในเอกสารข้อมูล: attiny85) สิ่งที่สำคัญที่สุดสำหรับเราคือ ADC 10 บิต (ไม่ใช่สิ่งที่ดีที่สุด แต่แม่นยำเพียงพอสำหรับฉัน) ในการสื่อสารกับ Esp8266 ฉันตัดสินใจใช้การสื่อสารแบบซีเรียล โดยคำนึงว่า esp8266 ใช้งานได้กับ 3.3V และ attiny85 ที่ 5V (เนื่องจากต้องใช้จ่ายไฟให้กับเซ็นเซอร์) เพื่อให้บรรลุสิ่งนั้น ฉันใช้ตัวแบ่งแรงดันแบบง่าย (ดูแผนผัง) หากต้องการอ่านอุณหภูมิติดลบ เราจำเป็นต้องเพิ่มส่วนประกอบภายนอก (ตัวต้านทาน 2x1N914 และ 1x18k) เนื่องจากฉันไม่ต้องการใช้แหล่งจ่ายไฟเชิงลบ นี่คือรหัส: พื้นที่เก็บข้อมูล TinyADC หมายเหตุ: คุณจะต้องติดตั้งเพื่อรวบรวมรหัสนี้ attiny to ide (แทรกสิ่งนี้ในตัวเลือก: https://drazzy.com/package_drazzy.com_index.json) หากคุณไม่ทราบวิธีการทำ เพียงค้นหาใน Google หรืออัปโหลดไฟล์.hex โดยตรง

ขั้นตอนที่ 4: DS18B20

DS18B20
DS18B20
DS18B20
DS18B20
DS18B20
DS18B20
DS18B20
DS18B20

ฉันซื้อเซ็นเซอร์เหล่านั้นจาก Amazon (5 ราคาประมาณ 10 ยูโร) มาพร้อมฝาปิดสแตนเลสและสายยาว 1 ม. เซ็นเซอร์นี้สามารถส่งคืนข้อมูลอุณหภูมิ 9 ถึง 12 บิต สามารถเสียบเซ็นเซอร์จำนวนมากในพินเดียวกันได้เนื่องจากเซ็นเซอร์ทั้งหมดมี ID เฉพาะ หากต้องการเสียบ DS18B20 กับ esp8266 คุณสามารถทำตามแผนผัง (ภาพที่สอง) เนื่องจากฉันตัดสินใจว่าคนตัดไม้ของฉันจะมีโพรบสามตัว ฉันต้องแยกแยะว่าอันไหนคืออันไหน ดังนั้นฉันจึงคิดว่าจะให้สีที่เชื่อมโยงผ่านซอฟต์แวร์กับที่อยู่ของพวกเขา ฉันใช้ท่อหดแบบเทอร์โม (รูปที่สาม)

ขั้นตอนที่ 5: รหัส ESP8266

รหัส ESP8266
รหัส ESP8266
รหัส ESP8266
รหัส ESP8266

เนื่องจากฉันยังใหม่กับโลกนี้ ฉันจึงตัดสินใจใช้ห้องสมุดจำนวนมาก ตามที่กล่าวไว้ในการแนะนำคุณสมบัติหลักคือ:

  • การอัปเดต OTA: คุณไม่จำเป็นต้องเสียบ esp8266 กับคอมพิวเตอร์ทุกครั้งที่ต้องการอัปโหลดโค้ด (คุณต้องทำในครั้งแรกเท่านั้น)
  • ตัวจัดการไร้สาย หากเครือข่ายไร้สายเปลี่ยนแปลง คุณไม่จำเป็นต้องอัปโหลดแบบร่างซ้ำ คุณสามารถกำหนดค่าพารามิเตอร์เครือข่ายอีกครั้งโดยเชื่อมต่อกับจุดเชื่อมต่อ esp8266
  • การถ่ายโอนข้อมูล Thingspeak;
  • รองรับทั้ง LM35 และ DS18B20;
  • ส่วนต่อประสานผู้ใช้อย่างง่าย (ไฟ LED RGB บ่งชี้ข้อมูลที่เป็นประโยชน์บางอย่าง);

ขออภัยฉันเนื่องจากซอฟต์แวร์ของฉันไม่ดีที่สุดและไม่ได้รับการสั่งซื้ออย่างดี ก่อนอัปโหลดไปยังอุปกรณ์ คุณต้องเปลี่ยนพารามิเตอร์บางอย่างเพื่อให้พอดีกับโค้ดกับการตั้งค่าของคุณ คุณสามารถดาวน์โหลดซอฟต์แวร์ได้ที่นี่ การกำหนดค่าทั่วไป LM35 และ DS18B20 คุณต้องเปลี่ยนคำจำกัดความของพิน โทเค็น หมายเลขช่อง ผู้ใช้ และรหัสผ่านสำหรับการอัปเดต OTA สายตั้งแต่ 15 ถึง 23

#กำหนดสีแดง YOURPINHERE #กำหนดสีเขียว YOURPINHERE

#define blue YOURPINHERE const char* host = "เลือกที่อยู่โฮสต์"; //ไม่จำเป็นจริงๆ คุณสามารถปล่อยให้ esp8266-webupdate const char* update_path = "/ firmware"; //เพื่อเปลี่ยนที่อยู่สำหรับการอัพเดต เช่น 192.168.1.5/firmware const char* update_username = "YOURUSERHERE"; const char* update_password = "YOURPASSWORDHERE; myChannelNumber แบบยาวที่ไม่ได้ลงชื่อ = CHANNELNUMBERHERE; const char * myWriteAPIKey = "WRITEAPIHERE";

ขั้นตอนที่ 6: รหัส ESP8266: ผู้ใช้ LM35

คุณต้องเชื่อมต่อบอร์ด attiny กับ esp8266 เพื่อจ่ายไฟให้กับหน่วย ADC ให้ใช้พิน VU และพิน G คุณต้องเลือกพินที่คุณต้องการใช้สำหรับการสื่อสารแบบอนุกรม (เพื่อให้ฮาร์ดแวร์ไม่มีซีเรียลสำหรับจุดประสงค์ในการดีบัก) ต้องเลือกพิน Tx แต่ไม่ได้ใช้จริงๆ (บรรทัดที่ 27). SoftwareSerial mySerial (RXPIN, TXPIN); ที่ด้านบนคุณต้องเพิ่ม:#define LM35USER

ขั้นตอนที่ 7: รหัส ESP8266: DS18B20 ผู้ใช้

ในการดำเนินการครั้งแรก คุณต้องระบุที่อยู่อุปกรณ์สำหรับเซ็นเซอร์แต่ละตัว รวบรวมและตั้งโปรแกรมรหัสนี้ให้กับ esp และดูผลลัพธ์แบบอนุกรม รหัสสามารถพบได้ที่นี่ (ค้นหาชื่อนี้ในหน้า: «อ่านที่อยู่ภายใน DS18B20 แต่ละรายการ»). เชื่อมต่อเซ็นเซอร์เพียงตัวเดียวเพื่อรับที่อยู่ ผลลัพธ์ควรเป็นดังนี้ (สุ่มตัวเลขที่นี่! เช่น):0x11, 0x22, 0x33, 0xD9, 0xB1, 0x17, 0x45, 0x12จากนั้นคุณต้องเปลี่ยนรหัสของฉันในส่วน " การกำหนดค่าสำหรับ DS18B20" (บรรทัดที่ 31 ถึง 36)":

#define ONE_WIRE_BUS ONEWIREPINHERE #define TEMPERATURE_PRECISION TEMPBITPRECISION // (ตั้งแต่ 9 ถึง 12) #define delayDallas READINTERVAL // (หน่วยเป็นมิลลิวินาที ขั้นต่ำคือ 15s หรือ 15000mS) DeviceAddress blueSensor = { 0x11, 0x22, 0x33x, 0xD1, 0xD1, 0xD 0x12}; // เปลี่ยนที่อยู่ของคุณ DeviceAddress redSensor = { 0x11, 0x22, 0x33, 0xD9, 0xB1, 0x17, 0x45, 0x12}; //เปลี่ยนที่อยู่ของคุณ DeviceAddress greenSensor = {0x11, 0x22, 0x33, 0xD9, 0xB1, 0x17, 0x45, 0x12 }; //เปลี่ยนด้วยที่อยู่ของคุณ ด้านบนคุณต้องเพิ่ม:#define DSUSER

ขั้นตอนที่ 8: ESP8266 Little Trick

ESP8266 ลิตเติ้ลทริก
ESP8266 ลิตเติ้ลทริก

หลังจากการทดสอบเล็กน้อย ฉันพบว่าหากคุณเสียบ esp8266 โดยไม่ต้องตั้งโปรแกรม โค้ดจะไม่เรียกใช้จนกว่าคุณจะกดรีเซ็ตหนึ่งครั้ง เพื่อแก้ปัญหานี้ หลังจากค้นคว้ามาบ้างแล้ว ฉันพบว่าคุณต้องเพิ่มตัวต้านทานแบบดึงขึ้นจาก 3.3V เป็น D3 การดำเนินการนี้จะบอกให้โปรเซสเซอร์โหลดโค้ดจากหน่วยความจำแฟลชด้วยวิธีนี้ D3 จึงสามารถใช้เพื่อป้อนข้อมูลสำหรับเซ็นเซอร์ DS18B20 ได้โดยตรง

ขั้นตอนที่ 9: การใช้งานครั้งแรก

ปฏิบัติการครั้งแรก
ปฏิบัติการครั้งแรก
ปฏิบัติการครั้งแรก
ปฏิบัติการครั้งแรก

หากคุณได้อัปโหลดรหัสอย่างถูกต้อง แต่ไม่เคยใช้ไลบรารีตัวจัดการ Wifi ก็ถึงเวลากำหนดค่าการเชื่อมต่อ wifi ของคุณ รอจนกว่าคุณจะเห็นไฟ LED RGB กะพริบเร็วขึ้นกว่าเดิม จากนั้นค้นหาเครือข่าย wifi ที่เรียกว่า "AutoConnectAp" ในมือถือหรือพีซีของคุณ แล้วเชื่อมต่อ หลังจากเชื่อมต่อ เปิดเว็บเบราว์เซอร์แล้วป้อน 192.168.4.1 คุณจะพบอินเทอร์เฟซ GUI ของตัวจัดการ wifi (ดูรูป) แล้วกด "กำหนดค่า Wifi" รอให้ esp8266 ค้นหาเครือข่าย wifi และเลือกเครือข่ายที่ต้องการ ใส่รหัสผ่านแล้วกด "บันทึก" Esp8266 จะรีสตาร์ท (ไม่สนใจ RGB ในครั้งนี้เพราะจะส่งข้อมูลแบบสุ่ม) และเชื่อมต่อกับเครือข่าย

ขั้นตอนที่ 10: สรุป

บทสรุป
บทสรุป
บทสรุป
บทสรุป
บทสรุป
บทสรุป
บทสรุป
บทสรุป

ในท้ายที่สุด นี่คือกราฟที่นำมาจากการทำงานของเครื่องบันทึกข้อมูลในขณะที่บันทึกอุณหภูมิช่องแช่แข็งของฉัน ในสีส้มคือ DS18B20 และสีน้ำเงินคือ LM35 และมันคือวงจร คุณสามารถเห็นความแตกต่างที่ใหญ่ที่สุดของความแม่นยำจากเซ็นเซอร์ดิจิทัลเป็นแอนะล็อก (ด้วยวงจร "ADC ที่แย่ของฉัน") ที่ให้ข้อมูลที่ไม่ใช่ทางกายภาพ สรุปว่า หากคุณต้องการสร้างตัวบันทึกนี้ ฉันขอแนะนำให้ใช้เซ็นเซอร์อุณหภูมิดิจิตอล DS18B20 เนื่องจากเป็น อ่านง่ายขึ้นและเกือบจะ "เสียบและเล่น" ได้มีเสถียรภาพและแม่นยำยิ่งขึ้น ทำงานที่ 3.3V และต้องการเพียงขาเดียวสำหรับเซ็นเซอร์จำนวนมาก ขอบคุณสำหรับความสนใจ ฉันหวังว่าโครงการนี้จะดีสำหรับคุณและคุณ พบข้อมูลที่เป็นประโยชน์ และสำหรับใครที่อยากจะรู้เรื่องนี้ ฉันหวังว่าฉันจะให้ข้อมูลทั้งหมดที่จำเป็น ถ้าไม่หลุดมาถามได้ทุกเรื่อง ยินดีตอบทุกคำถามครับ เนื่องจากฉันไม่ใช่ผู้พูดภาษาอังกฤษ หากมีอะไรผิดพลาดหรือไม่เข้าใจโปรดแจ้งให้เราทราบ หากคุณชอบโครงการนี้ โปรดโหวตให้การประกวดและ/หรือแสดงความคิดเห็น ☺ มันจะสนับสนุนให้ฉันอัปเดตและเผยแพร่เนื้อหาใหม่ต่อไป ขอขอบคุณ.

แนะนำ: