Мазмуну:

Pythonдогу BME280 менен Raspberry Pi колдонулган аба ырайы станциясы: 6 кадам
Pythonдогу BME280 менен Raspberry Pi колдонулган аба ырайы станциясы: 6 кадам

Video: Pythonдогу BME280 менен Raspberry Pi колдонулган аба ырайы станциясы: 6 кадам

Video: Pythonдогу BME280 менен Raspberry Pi колдонулган аба ырайы станциясы: 6 кадам
Video: Python! Tuples 2024, Июль
Anonim
Image
Image
Императивдик жабдуулар боюнча мыйзам долбоору
Императивдик жабдуулар боюнча мыйзам долбоору

isith a scéalaí an aimir (The Weather is a Good Storyteller)

Глобалдык жылуулук жана климаттын өзгөрүшү менен, глобалдык аба ырайы биздин дүйнөдө туруксуз болуп, аба ырайына байланыштуу бир катар табигый кырсыктарга (кургакчылык, экстремалдык температура, суу ташкындары, бороон жана токой өрттөрү) алып келет, метеостанция зарыл болуп көрүнөт. үйдө жамандык. Сиз арзан тетиктерди жана сенсорлорду колдонуу менен метеостанциянын долбоорунан негизги электроника жөнүндө көп нерселерди үйрөнөсүз. Орнотуу абдан оңой жана аны эч убакта ала албайсыз.

1 -кадам: Императивдик жабдуулар боюнча мыйзам долбоору

Императивдик жабдуулар боюнча мыйзам долбоору
Императивдик жабдуулар боюнча мыйзам долбоору
Императивдик жабдуулар боюнча мыйзам долбоору
Императивдик жабдуулар боюнча мыйзам долбоору
Императивдик жабдуулар боюнча мыйзам долбоору
Императивдик жабдуулар боюнча мыйзам долбоору

1. Raspberry Pi

Raspberry Pi тактасына колуңузду алыңыз. Raspberry Pi - бул Linux менен иштөөчү бир такталуу компьютер. Raspberry Pi - бул чындыгында арзан, кичинекей жана универсалдуу, жеткиликтүү жана функционалдуу компьютерден курулган, окуучулар программалоонун жана программалык камсыздоонун негиздерин колдонушу үчүн.

2. Raspberry Pi үчүн I2C Shield

INPI2 (I2C адаптери) Raspberry Pi 2/3 жана I²C портун бир нече I2C түзмөктөрү менен камсыз кылат. Бул DCUBE дүкөнүндө жеткиликтүү.

3. Санариптик нымдуулук, басым жана температура сенсору, BME280

BME280 - нымдуулук, басым жана температура сенсору, ал тез жооп берүү убактысына жана жалпы тактыкка ээ. Биз бул сенсорду DCUBE дүкөнүнөн сатып алдык.

4. I2C туташтыруу кабели

Биз DCUBE дүкөнүндө бар I²C кабелин колдондук.

5. Микро USB кабели

Микро USB кабели Электр энергиясы менен камсыздоо Raspberry Pi менен иштөө үчүн идеалдуу чечим.

6. EthernetCable/WiFi адаптери аркылуу Интернетке кирүүнү чечмелеңиз

Интернетке кирүүнү жергиликтүү тармакка жана интернетке туташкан Ethernet кабели аркылуу иштетсе болот. Же болбосо, зымсыз тармакка конфигурацияны талап кылган USB зымсыз ключту колдонуп туташа аласыз.

7. HDMI Cable (Дисплей жана байланыш кабели)

Ар кандай HDMI/DVI монитор жана каалаган сыналгы Pi үчүн дисплей катары иштеши керек. Же болбосо, мониторго болгон муктаждыкты жокко чыгаруучу SSH аркылуу Piге алыстан кире аласыз (өнүккөн колдонуучулар үчүн гана).

2 -кадам: Райондук аппараттык туташуулар

Райондук аппараттык туташуулар
Райондук аппараттык туташуулар
Райондук аппараттык туташуулар
Райондук аппараттык туташуулар

Схеманы көрсөтүлгөн схемага ылайык жасаңыз. Жалпысынан алганда, байланыштар абдан жөнөкөй. Тынчтыкты сактаңыз жана жогорудагы көрсөтмөлөрдү жана сүрөттөрдү ээрчиңиз, жана сизде эч кандай көйгөй болбошу керек. Окуп жатып, биз аппараттык жана программалык билимге байланыштуу электрониканын негиздерин жакшылап үйрөндүк. Биз бул долбоор үчүн жөнөкөй электроника схемасын түзгүбүз келген. Электрондук схемалар чиймеге окшош. Долбоорду кылдат иштеп чыгып, кылдаттык менен аткарыңыз. Бул жерде электрониканын бир нече негизги түшүнүктөрү пайдалуу болушу мүмкүн!

Raspberry Pi жана I2C Shieldдин туташуусу

Биринчиден, Raspberry Pi алып, ага I²C Shield коюңуз. Калканды акырын басыңыз жана биз бул кадамды пирог сыяктуу оңой бүтүрдүк (сүрөттү караңыз).

Сенсор менен Raspberry Pi байланышы

Сенсорду алып, аны менен I²C кабелин туташтырыңыз. I²C Output ар дайым I²C киришине туташып турганын текшериңиз. I²C калканчасы GPIO төөнөгүчтөрү менен орнотулган Raspberry Pi үчүн да ушундай кылыш керек. Биз I²C кабелин колдонууну сунуштайбыз, анткени бул кичинекей тайып кетүүдөн келип чыккан pinouts, soldering жана начарлукту окуу зарылдыгын жокко чыгарат.. Бул жөнөкөй плагин жана ойнотуу кабели менен, сиз орнотуп, такталарды алмаштырып же колдонмого көп такталарды оңой кошо аласыз.

Эскертүү: күрөң зым дайыма бир түзмөктүн чыгышы менен башка түзмөктүн киришинин ортосундагы Ground (GND) байланышын ээрчиши керек

Интернетке туташуу ачкыч болуп саналат

Бул жерде сизде эки тандоо бар. Же Raspberry Pi тармагын Ethernet кабели аркылуу туташтырсаңыз болот же WIFI туташуусу үчүн USB менен WiFi адаптерин колдонсоңуз болот. Кандай болбосун, ал интернетке туташып турганда.

Районду иштетүү

Micro USB кабелин Raspberry Pi'дин кубат уячасына сайыңыз. Чык жана воила! Биздин команда маалымат.

Экранга туташуу

Биз HDMI кабелин мониторго же сыналгыга туташтыра алабыз. Кошумча катары, биз Raspberry Pi -ге алыстан кирүү аркылуу мониторго туташтырбастан кире алабыз. SSH - коопсуз алыстан кирүү үчүн ыңгайлуу курал. Бул үчүн сиз PUTTY программасын колдоно аласыз. Бул параметр өркүндөтүлгөн колдонуучулар үчүн, ошондуктан биз бул жерде майда -чүйдөсүнө чейин каралбайбыз.

Эгерде сиз көп сарптоону каалабасаңыз, бул экономикалык ыкма

3 -кадам: Pythonдо Raspberry Pi программалоо

Pythonдо Raspberry Pi программалоо
Pythonдо Raspberry Pi программалоо

Raspberry Pi жана BME280 сенсорунун Python коду. Бул биздин Github репозиторийибизде жеткиликтүү.

Кодго өтүүдөн мурун, Readme файлында берилген көрсөтмөлөрдү окуп чыкканыңызга ишениңиз жана ага ылайык Raspberry Pi орнотуңуз. Бир аз убакыт гана сизди даярдайт. Аба ырайы станциясы - кургакта да, деңизде да, аба ырайынын божомолун берүү үчүн жана аба ырайы менен климатты изилдөө үчүн атмосфералык шарттарды өлчөө үчүн приборлор жана жабдуулар менен.

Код так сиздин алдыңызда жана сиз элестете турган эң жөнөкөй формада жана сизде эч кандай көйгөй болбошу керек. Дагы деле барбы деп сураңыз (Миң нерсени билсеңиз дагы, билген адамдан сураңыз).

Бул сенсордун Python кодун бул жерден көчүрүп алсаңыз болот.

# Эркин лицензия менен бөлүштүрүлгөн.# Аны каалагандай колдон, пайда же бекер, эгер ал тиешелүү эмгектеринин лицензиясына туура келсе. # BME280 # Бул код BME280_I2CS I2C Mini Module менен иштөө үчүн ControlEverything.com жеткиликтүү. #

smbus импорттоо

импорттоо убактысы

# I2C автобусун алыңыз

автобус = smbus. SMBus (1)

# BME280 дареги, 0x76 (118)

# 0x88 (136) маалыматтарын кайра окуу, 24 байт b1 = bus.read_i2c_block_data (0x76, 0x88, 24)

# Маалыматтарды айландыруу

# Температура коэффициенттери dig_T1 = b1 [1] * 256 + b1 [0] dig_T2 = b1 [3] * 256 + b1 [2] if dig_T2> 32767: dig_T2 -= 65536 dig_T3 = b1 [5] * 256 + b1 [4] if dig_T3> 32767: dig_T3 -= 65536

# Басым коэффициенттери

dig_P1 = b1 [7] * 256 + b1 [6] dig_P2 = b1 [9] * 256 + b1 [8] if dig_P2> 32767: dig_P2 -= 65536 dig_P3 = b1 [11] * 256 + b1 [10] if dig_P3 > 32767: dig_P3 -= 65536 dig_P4 = b1 [13] * 256 + b1 [12] if dig_P4> 32767: dig_P4 -= 65536 dig_P5 = b1 [15] * 256 + b1 [14] if dig_P5> 32767: dig_P5 -= 65536 dig_P6 = b1 [17] * 256 + b1 [16] dig_P6> 32767 болсо: dig_P6 -= 65536 dig_P7 = b1 [19] * 256 + b1 [18] if dig_P7> 32767: dig_P7 -= 65536 dig_P8 = b1 [21] * 256 + b1 [20] if_P8> 32767: dig_P8 -= 65536 dig_P9 = b1 [23] * 256 + b1 [22] if dig_P9> 32767: dig_P9 -= 65536

# BME280 дареги, 0x76 (118)

# 0xA1 (161) маалыматтарын кайра окуу, 1 байт dig_H1 = bus.read_byte_data (0x76, 0xA1)

# BME280 дареги, 0x76 (118)

# 0xE1 (225) маалыматтарын кайра окуу, 7 байт b1 = bus.read_i2c_block_data (0x76, 0xE1, 7)

# Маалыматтарды айландыруу

# Нымдуулуктун коэффициенттери dig_H2 = b1 [1] * 256 + b1 [0] if dig_H2> 32767: dig_H2 -= 65536 dig_H3 = (b1 [2] & 0xFF) dig_H4 = (b1 [3] * 16) + (b1 [4] & 0xF) if dig_H4> 32767: dig_H4 -= 65536 dig_H5 = (b1 [4] / 16) + (b1 [5] * 16) if dig_H5> 32767: dig_H5 -= 65536 dig_H6 = b1 [6] if dig_H6> 127: dig_H6 -= 256

# BME280 дареги, 0x76 (118)

# Нымдуулукту көзөмөлдөө регистрин тандаңыз, 0xF2 (242) # 0x01 (01) Нымдуулуктан ашык = 1 bus.write_byte_data (0x76, 0xF2, 0x01) # BME280 дареги, 0x76 (118) # Select Control өлчөө регистрин тандаңыз, 0xF4 (244) # 0x27 (39) Кысым жана Температура Oversampling ылдамдыгы = 1 # Жөнөкөй режим bus.write_byte_data (0x76, 0xF4, 0x27) # BME280 дареги, 0x76 (118) # Конфигурация регистрин тандоо, 0xF5 (245) # 0xA0 (00) Stand_by time = 1000 ms bus.write_byte_data (0x76, 0xF5, 0xA0)

убакыт.уйку (0.5)

# BME280 дареги, 0x76 (118)

# 0xF7 (247) маалыматтарын кайра окуу, 8 байт # Pressure MSB, Pressure LSB, Pressure xLSB, Temperature MSB, Temperature LSB # Temperature xLSB, Humidity MSB, Humidity LSB data = bus.read_i2c_block_data (0x76, 0xF7, 8)

# Кысым жана температура маалыматтарын 19 битке айландырыңыз

adc_p = ((маалымат [0] * 65536) + (маалымат [1] * 256) + (маалымат [2] & 0xF0)) / 16 adc_t = ((маалымат [3] * 65536) + (маалымат [4] * 256) + (маалыматтар [5] & 0xF0)) / 16

# Нымдуулук маалыматын которуу

adc_h = маалымат [6] * 256 + маалымат [7]

# Температуранын ордун эсептөө

var1 = ((adc_t) / 16384.0 - (dig_T1) / 1024.0) * (dig_T2) var2 = (((adc_t) / 131072.0 - (dig_T1) / 8192.0) * ((adc_t) /131072.0 - (dig_T1) /8192.0)) * (dig_T3) t_fine = (var1 + var2) cTemp = (var1 + var2) / 5120.0 fTemp = cTemp * 1.8 + 32

# Басымдын ордун эсептөө

var1 = (t_fine / 2.0) - 64000.0 var2 = var1 * var1 * (dig_P6) / 32768.0 var2 = var2 + var1 * (dig_P5) * 2.0 var2 = (var2 / 4.0) + ((dig_P4) * 65536.0) var1 = ((dig_P3) * var1 * var1 / 524288.0 + (dig_P2) * var1) / 524288.0 var1 = (1.0 + var1 / 32768.0) * (dig_P1) p = 1048576.0 - adc_p p = (p - (var2 / 4096.0)) * 6250.0 / var1 var1 = (dig_P9) * p * p / 2147483648.0 var2 = p * (dig_P8) / 32768.0 басым = (p + (var1 + var2 + (dig_P7)) / 16.0) / 100

# Нымдуулукту эсептөө

var_H = ((t_fine) - 76800.0) var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 671088.0.0 *))) нымдуулук = var_H * (1.0 - dig_H1 * var_H / 524288.0) эгерде нымдуулук> 100.0: нымдуулук = 100.0 elif нымдуулугу <0.0: нымдуулук = 0.0

# Экранга маалыматтарды чыгаруу

басып чыгаруу "Цельсий боюнча температура: %.2f C" %cTemp басып чыгаруу "Фаренгейт температурасы: %.2f F" %fTemp басып чыгаруу "Басым: %.2f hPa" %басым басып чыгаруу "Салыштырмалуу нымдуулук: %.2f %%" %нымдуулук

4 -кадам: Running Code

Running Code
Running Code

Эми кодду жүктөп алыңыз (же git pull) жана аны Raspberry Piден ачыңыз.

Терминалга кодду компиляциялоо жана жүктөө үчүн буйруктарды аткарыңыз жана дисплейдеги чыгууну көрүңүз. Бир нече секунддан кийин, ал бардык параметрлерди көрсөтөт. Баары сонун иштээрине ынангандан кийин, сиз дагы кызыктуу нерселерди өнүктүрө аласыз.

5 -кадам: Практикалык дүйнөдө колдонуу

BME280 нымдуулукту жана басымды өлчөөнү талап кылган бардык колдонмолордо жогорку көрсөткүчтөргө жетишет. Бул жаңы пайда болгон колдонмолор Контексттен кабардар болуу, мис. Терини аныктоо, Бөлмөнүн өзгөрүшүн аныктоо, Фитнести көзөмөлдөө / Жакшы жашоо, Кургактыкка же Жогорку температурага байланыштуу эскертүү, Көлөмдү жана аба агымын өлчөө, Үйдү автоматташтыруу, Контролдоо Жылытуу, Желдетүү, Кондиционерлөө (HVAC), Интернет нерселери (IoT), GPSти жакшыртуу (мис. Убакыт-Биринчи оңдоону жакшыртуу, Өлгөндөрдү эсепке алуу, жантайманы аныктоо), Үй ичиндеги навигация (Полду аныктоо, лифтти аныктоо), Ачык навигация, Эс алуу жана спорттук колдонмолор, Аба ырайы божомолу жана Тик ылдамдык көрсөткүчү (Rise/Sink Ылдамдык).

6 -кадам: Жыйынтык

Бул долбоор кийинки эксперименттерге дем берет деп үмүттөнөбүз. Аба ырайынын татаалыраак станциясын жасоо Rain Gauge, Жарык сенсору, анемометр (шамалдын ылдамдыгы) сыяктуу дагы башка сенсорлорду камтышы мүмкүн. Сиз аларды кошуп кодду өзгөртө аласыз. Бизде YouTubeда Rasp Pi менен I²C сенсорунун негизги иштеши бар видео сабагы бар. I²C байланыштарынын натыйжаларын жана иштешин көрүү чынында таң калыштуу. Курууну жана үйрөнүүнү кызыктуу кылыңыз! Сураныч, бул үйрөткүч жөнүндө оюңузду билдириңиз. Керек болсо кээ бир жакшыртууларды жасоону каалайбыз.

Сунушталууда: