Мазмуну:

White Noise Night Light: 11 кадам (Сүрөттөр менен)
White Noise Night Light: 11 кадам (Сүрөттөр менен)

Video: White Noise Night Light: 11 кадам (Сүрөттөр менен)

Video: White Noise Night Light: 11 кадам (Сүрөттөр менен)
Video: 3-нжи ТУНЧЕ АРВЫ ҮЙДЕ 2024, Ноябрь
Anonim
Ак чуу түнкү жарык
Ак чуу түнкү жарык
Ак чуу түнкү жарык
Ак чуу түнкү жарык

Бул менин 1 жашар балам үчүн Рождество үчүн жасаган долбоорум. Чынын айтсам, бул мага жана менин аялыма акыл -эстүүлүк белеги болду. Бул веб -интерфейс аркылуу тандалган бир нече ар кандай үндөрдү ойното турган, ошондой эле убакыттын өтүшү менен түсүн өзгөрткөн чырактарды камтыган ак ызы -чуу машинасы (кызыл чырактар төшөктө, сары сиздин бөлмөңүздө ойной алат дегенди билдирет, жашыл болсо бул жакшы) чыгуу). Менин уулум убакытты айтууга өтө кичинекей болгондуктан, түскө негизделген түнкү чырак чындап эле жакшы идея болуп көрүндү.

Бул чындыгында оңой проект, жана мен кодду жазып койгондуктан, балким, бул масштабдагы 5тин 1и. Эгерде сизди эртең мененки убакта эртең мененкидей убара кыла турган кичинекей балдарыңыз болсо, анда аны жасоону каалайсыз.

1 -кадам: Бөлүктөрдүн тизмеси

Бөлүктөр тизмеси
Бөлүктөр тизмеси
Бөлүктөр тизмеси
Бөлүктөр тизмеси
Бөлүктөр тизмеси
Бөлүктөр тизмеси

1. Raspberry Pi Zero W

2. Кандайдыр бир иш (мен муну Amazonдон колдондум)

3. Пиморониден Blinkt

4. Спикер Phat Pimoroni (Сиз ошондой эле арзан спикерлер менен башка DAC колдоно аласыз)

Катуу сүйлөткүчтү чогултуу үчүн кээ бир негизги ширетүү көндүмдөрүнө ээ болушуңуз керек, продукт баракчасынан этап-этабы менен көрсөтмөсү бар шилтеме бар, андыктан аны бурмалай албайсыз.

5. [ОПЦИОНАЛДЫК] Панелге орнотулган микро USB кабели - Adafruitтен

6. кээ бир туташтыруучу зымдар же секиргичтер

Дал ушул!

2 -кадам: Raspbianди күйгүзүңүз жана такталарды илиңиз

Raspbian өрттөп, такталарды илип коюңуз
Raspbian өрттөп, такталарды илип коюңуз

Мен бул курулуш үчүн Raspian Stretch lite колдонуп жатам. Муну microSDге күйгүзүңүз, сиз үчүн кандай курал болбосун, андан кийин пиди күйгүзүңүз. Эгерде сизге үйүңүздүн Wi -Fi тармагына туташуу жана sshти иштетүү үчүн башы жок пи алууга жардам керек болсо, онлайнда муну кантип көрсөтө турган көптөгөн окуу куралдары бар, бирок сиз муну калганыңыз үчүн кылганыңызды текшеришиңиз керек. иштөө.

Http://pinout.xyzди колдонуу менен сиз эки тактаны тең тартып, бул сайттан алардын пинуттарын ала аласыз. Blinkt такталарына 4 гана байланыш керек, ал эми Phat Speaker 9га муктаж.

Ал бүткөндө сүрөткө окшош болушу керек. Эми биз баары иштеп жаткандыгын текшеришибиз керек.

3 -кадам: Керектүү Программаны орнотуу

Эми туташкандан кийин, Blinkt жана Speaker Phat такталарын иштетүү үчүн керектүү программаны орнотушубуз керек. SSH пи үчүн, жана сиз өзүңүздү үй каталогунда таба аласыз. Төмөнкүлөрдү киргизиңиз:

curl https://get.pimoroni.com/blinkt | bash

анан бүткөндөн кийин, бул:

curl -sS https://get.pimoroni.com/speakerphat | bash

Бул Pimoroni такталарына керектүү нерсенин баарын орнотот. Эгер ls буйругун киргизсеңиз, Pimoroni каталогун көрүшүңүз керек. Эми бир аз код жазып, Blinkt тактасын сынап көрөлү.

4 -кадам: Кээ бир коддорду жазуу жана аны текшерүү

Mkdir сценарийлерин терүү менен "скрипттер" деп аталган каталог түзүңүз, биз ошол жерде иштешибиз үчүн керектүү нерселердин бардыгын сактайбыз. Ошентип, папкага кирүү үчүн CD скрипттери.

Эми биз каалаган нерсе - түнкүсүн кызыл күңүрт чырактар, тынч ойноо үчүн сары күңүрт жарыктар жана жарык чыкканда бир аз ачык жашыл жарыктар. Мен үчүн кечки саат 7: 30дан таңкы 6: 15ке чейин кызыл чырактар күйгүсү келген, ал эми таңкы 6: 15те алар бир саат бою сарыга, анан 7: 15те акыры жашыл болуп күйүшмөк. Мен ошондой эле, алар бөлмөдө эч ким болбогондо, таңкы 8: 30да өчүрүлүшүн кааладым.

Мунун эки жолу бар. Биринчиси (мен тандап алган жол) cron жумуштарынан чыккан төрт башка сценарий менен. Муну жасоонун башка жолу - бул сценарий, ал ишке киргизилгенде иштей турган убакыт функциясын камтыйт. Мен чындыгында сценарийди биринчи ушундай кылыш үчүн жазгам, бирок муну cronго караганда анча эффективдүү эмес окшойт, ошондуктан мен аны алмаштырдым. Эгерде сиз "бир сценарий" ыкмасын кааласаңыз, мага билдириңиз жана мен аны комментарийлерге жаза алам.

Андыктан, кызыл сценарийден баштайлы. Түрдү тийиңиз red.py, анан nano red.py. Андан кийин төмөнкү кодду киргизиңиз.

#!/usr/bin/env python

импорт blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.3) blinkt.set_pixel (3, 128, 0, 0) blinkt.set_pixel (4, 128, 0, 0) #3 жана 4 пикселдерди кызыл blinkt.show ()

Yellow.py жана green.py үчүн да ушундай кылыңыз.

yellow.py:

#!/usr/bin/env python

импорт blinkt blinkt.set_clear_on_exit (Жалган) blinkt.set_brightness (0.2) blinkt.set_pixel (2, 128, 128, 0) blinkt.set_pixel (3, 128, 128, 0) blinkt.set_pixel (4, 128, 128, 0) blinkt.set_pixel (5, 128, 128, 0) #2, 3, 4 жана 5 пикселдерин сары blinkt.show ()

green.py:

#!/usr/bin/env python

импорт blinkt blinkt.set_clear_on_exit (False) blinkt.set_brightness (0.2) blinkt.set_all (0, 128, 0) #бардык пикселдерди жашыл blinkt.show () коюу

Акыр -аягы, биз керек болбогон учурда Blinktти тазалоо үчүн сценарийди каалайбыз (lightsout.py):

#!/usr/bin/env python

импорт blinkt blinkt.set_clear_on_exit (Чыныгы) blinkt.set_brightness (0.1) blinkt.set_all (0, 0, 0) #бардык пикселдерди өчүрөт blinkt.show ()

Дал ушул. Python red.py түрүн текшерип, эки орто пикселдин кызыл күйүп турганын текшериңиз. Андан кийин аны тазалоо үчүн python lightsout.py териңиз. Дал ушул! Андан кийин биз аларды cron өтмөгүнө орнотушубуз керек, алар каалаган убакта иштешет.

5 -кадам: Бул скрипттерди Cronго кошуу

SSH терминалында crontab -e деп жазыңыз

файлдын аягына чейин жылдырып, төмөнкү саптарды кошуңуз:

15 6 * * * python /home/pi/scripts/yellow.py15 7 * * * python /home/pi/scripts/green.py 30 8 * * * python /home/pi/scripts/lightsout.py 30 19 * * * python /home/pi/scripts/red.py

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

Бул түнкү жарык үчүн! Супер оңой. Эми бул курулуштун Ак Чуу бөлүгүн орнотууга өтөлү.

6 -кадам: Phat спикерин текшерүү

Динамик Phatти текшерүүнүн эң оңой жолу - бул sox орнотуу жана буйрук сабынан статиканы иштетүү.

sudo apt-get орнотуу sox

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

play -n synth brownnoise synth pinknoise mix synth 0 0 0 10 10 40 trapezium amod 0.1 30

Кандай эс алдырат! Ctrl+c аны токтотот. Бирок, бул эмне? Динамик Фаттын бетинде көптөгөн LED диоддору күйүп турат жана бизде Blinkt чырактарына кийлигише албайбыз. Андыктан буларды өчүрүп салалы.

Бул үчүн, биз /etc/asound.conf файлын өзгөртүп, VU метр плагинин алып салышыбыз керек, андыктан ал биринчи кезекте светодиоддорду айдоого аракет кылбайт. Мен муну жөн эле атын өзгөртүү аркылуу кылдым. Бул буйрукту териңиз mv /etc/asound.conf /etc/asound.conf.bak Мен муну бир аз Googling аркылуу таптым, андыктан жакшы жол болушу мүмкүн.

Сокс иштейт, бул сонун, бирок мен бул машинанын ак ызы-чуу бөлүгү үчүн бир нече ийкемдүү MP3 колдонууну пландадым, андыктан мага башка оюнчу керек, чынында жеңил нерсе. mpg123 мен чечкен нерсе. Муну азыр sudo apt-get mpg123 менен орнотуңуз

Макул, эми биз Phat Speaker күтүлгөндөй иштээрин билгенибизден, интерфейсти жана тиешелүү сценарийлерди курууга убакыт келди.

7 -кадам: Small Webserver жана Webapp орнотуу

Flask - бул Python тилинде жазылган микро желе алкагы. Бул веб -серверге керектүү бардык функцияларды камсыздайт (ал колдонмо катары иштейт). Аны төмөнкү буйрук менен орнотуңуз:

pip3 колбасын орнотуу

Бул бир аз убакытты талап кылат, андыктан күтө туруңуз. Ал аяктагандан кийин, веб -сайт иштеп баштаганда тартып алышыбыз керек болгон папкаларды түзүшүбүз керек жана бул папкалардын белгилүү аттары бар. Вебсайтты жайгаштыра турган жерден баштайлы. Үй каталогунан mkdir www менен www деп аталган жаңы каталог жасаңыз. Эми ошол каталогго www cd. Бул жерде бизге дагы эки каталог керек, бири статикалык, экинчиси шаблондор.

Бизге ошондой эле MP3'лерибизди кое турган жер керек. Бул үчүн үй каталогунда "үндөр" деп аталган каталог түздүм. Мен MP3'теримди Google'дан loopable whitenoise MP3 издеп таптым. Көчүрүү үчүн бош жерлер көп. Мен файлдарды жүктөө үчүн WinSCPти колдондум.

Сиз аларды төмөндөгү omxplayer буйругу менен сынап көрүшүңүз мүмкүн --vol -### бөлүгү менен бөлмөңүздүн үнүнүн туура деңгээлин терүү үчүн. Кайра Ctrl+C ойнотуучуну токтотот.

Эми бизде бардыгы бар, пи ишке киргенде веб -серверди тургузуу үчүн бир нече питон жаза берели. Www каталогуна кайтып, webapp.py (nano webapp.py) деп аталган жаңы файлды баштаңыз жана төмөнкү кодду киргизиңиз

webbapp.py:

#!/usr/bin/python

колбадан импорттоо Flask, render_template, суроо -талап, импортту кайра иштетүү os app = Flask (_ name_) @app.route ('/') def index (): return render_template ('index.html') @app.route ('/rain'), ыкмалар = ['POST']) def жамгыры (): os.system ("mpg123 -f 8000 --loop -1 ~/скрипттер/үндөр/жамгыр.mp3") кайра багыттоо ('/') @app.route ('/толкундар', ыкмалар = ['POST']) def толкундары (): os.system ("mpg123 -f 20500 --loop -1 ~/скрипттер/үндөр/толкундар.mp3") кайра багыттоо ('/') @app.route ('/whitenoise', ыкмалары = ['POST']) def whitenoise (): os.system ("mpg123 --loop -1 ~/скрипттер/үндөр/whitenoise.mp3") кайра багыттоо (') /') @app.route ('/stop ', ыкмалар = [' POST ']) def stop (): os.system ("killall mpg123") кайра багыттоо ('/') эгер _name_ ==' _main_ 'болсо: app.run (мүчүлүштүктөр = Чын, хост = '0.0.0.0')

Көрүнүп тургандай, бул вебаппта 5 баракча болот, бирөө индексте, 3 башка 3 үндө (толкун, жамгыр жана ак түс) 3 жана дагы 1 токтоо. Бардык 4 индекстүү эмес барактар omxplayerге жөнөтүлгөн буйрукту аткаргандан кийин кайра индексте ('/') кайра багытталат, ошондуктан биз бир гана index.html түзүшүбүз керек, башка эч нерсе жок. Мен бул жерде killall функциясын stop функциясы катары колдонуп жатам, анткени omxplayerге "токтот" командасын жөнөтүүнүн жакшы жолун таба алган жокмун. Эгер сиз муну кылуунун жакшы жолун билсеңиз, мен муну уккум келет!

Эми index.html чогулталы.

8 -кадам: Вебсайтты түзүү

Вебсайтты куруу
Вебсайтты куруу
Вебсайтты куруу
Вебсайтты куруу
Вебсайтты куруу
Вебсайтты куруу
Вебсайтты куруу
Вебсайтты куруу

Бул мен куруу үчүн колдонгон сүрөттөр, бирок өзүңүздүн сүрөтүңүздү тартынбаңыз. Алардын баары биз мурда жасаган статикалык папкада сакталышы керек. Бул жерде жасай турган index.html файлы шаблондор папкасында болушу керек. Бул абдан маанилүү, антпесе эч бири иштебейт. Бул жерде менин index.html кодум (дагы бир жолу, бул жөн эле html, андыктан сиз үчүн кандай болбосун, аны өзгөртүңүз).

Instructables мага чийки HTML жазууга уруксат бербегендиктен, бул жерде менин Dropboxто болгон файлдын шилтемеси:

www.dropbox.com/s/n5xf2btftk5sz9b/index.ht…

Бирок, качандыр бир убакта өлүп калса, HTML файлы жөн эле кээ бир кооз CSS жана 2x2 столунда 4 белгиси бар, посттордун мааниси бар баскычтар:

форма аракети = "/whitenoise" method = "post"

input src = "/static/whitenoise.png" value = "Ак ызы -чуу"

Өзүңүздү жасоо оңой болушу керек.

Акыркы кадам - webapp.py ишке киришине ынануу, мен муну crontabга кошуу менен жасадым. Ошентип, дагы бир жолу crontab -e терип, аягына чейинкилерин кошуңуз:

@reboot python3 /home/pi/www/webapp.py

Андан кийин пиди өчүрүп күйгүзүңүз, браузерди башка машинада (телефонуңузда) пинин IP дарегине көрсөтүңүз (эгер сиз муну статикалык кыла алсаңыз жакшы) жана анын иштегенин текшериңиз. Баскычтарды чыкылдатып, ызы -чуу болгонун көрүңүз.

Android телефонуңузда веб -сайтты башкы экраныңызга кыстарып койсоңуз болот, муну мен аны колдонмо сыяктуу сезүү үчүн жасадым. Эгерде сиз чындап эле аны "про" кылып көрсөткүңүз келсе, ылайыктуу.ico файлын табыңыз же түзүңүз жана веб -сайтка телефонуңуздун башкы экранында көрүнүүчү жана колдонмого окшош болгон өзүнүн сөлөкөтүн бериңиз. Веб -сайтка сөлөкөт (фавикон) кошуу боюнча онлайн сабактары көп.

9 -кадам: Баарын бир иште джемдеңиз

Баарын бир иште джем
Баарын бир иште джем
Баарын бир иште джем
Баарын бир иште джем
Баарын бир иште джем
Баарын бир иште джем

Эми бардыгы текшерилген жана иштеп жаткандыктан, бардыгын бир ишке толтурууга убакыт келди.

Мен Raspberry Pi Zero үчүн үйдүн тегерегинде калган пластмассаны колдонуп токтоочу жай курдум. Мен андан кийин микро USB панелине орнотуу үчүн кээ бир тешиктерди бурдум жана кээ бир зергерлердин файлдарын колдонуп, тешиктен чарчадым. Панелге орнотуучу кабель бир аз катуу, ошондуктан мен келечекте Pi'деги микро USB портуна туура бурчтуу адаптер сатып алам.

Мен корпустун үстүндөгү кичинекей тешикти кесип, спикер эки тешип, Дремел менен туташтырып ойнойм. Андан кийин капкактын тешиктерин тешип, динамик Phatти орнотушту. Бул баалуу нерсе үчүн, бул сүрөттү тарткандан кийин мен кайра бардым жана дагы бир нече тешик жасадым, анткени ызы -чуу чынында корпустун ичине түшүп калган. Мен ошол плакатты колдонуп, Блинктти орноттум, анткени ал жерде тешик жок, бирок шпаклевка жакшы кармалгандай көрүнөт, ошондо болот.

10 -кадам: Болду

Дал ушул!
Дал ушул!

Аны сайыңыз жана бүттүңүз. Мына меники кечки саат 8ден кийин чуркап жатат. Пидеги жашыл LED бул фото көрүнгөндөй жарык эмес.

Кийинчерээк мен киргизген түзөтүүлөр:

Мен webapp.py жана index.html файлдарына дагы 4 барак коштум. Бул төртөө "кызыл", "сары", "жашыл" жана "өчүк". Аябай түшүнүктүү. Мен аялым экөөбүз чарчап, тынчсызданууну каалабасак, жашылдан сарыга алмаштырууну кааладым.

@app.route ('/red', ыкмалары = ['POST']) def red (): os.system ("python ~/scripts/red.py") кайра багыттоо ('/')

Негизинен 4 жолу, 4 башка сценарийди иштетип, андан кийин ошол барактарды чакырган индекстеги дагы бир нече баскычтар.

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

Эгерде мен кандайдыр бир кошумча өзгөртүүлөрдү киргизсем, бул жакка кайра келем жана тизмектейм.

11 -кадам: Кошумча

Муну кургандан кийин, мен аялымды экөөбүз тең телефонду ылдый таштап, баланы төшөккө жаткырып же уктап калаарын түшүндүм. Ошентип, мен 36 -физикалык пинге бир аз баскычты кошуп, rc.localде баштоо үчүн төмөнкү кодду киргиздим (мен button.py деп атадым):

#!/usr/bin/env python

GPIO импорт убактысы импорттоо RPi. GPIO импорттоо импорттоо подпроцесс импорт GPIO.setmode (GPIO. BOARD) # Физикалык пин номерлөө схемасын колдонуу баскычы = 36 # Баскыч физикалык пин 16 GPIO.setup менен байланышкан (баскыч, GPIO. IN, pull_up_down = GPIO. PUD_UP) # Кнопканы киришке киргизиңиз, Тартуу учурунда Резисторду Ишке киргизиңиз: эгер GPIO.input (баскычы) == 0: # Баскычты күтсөңүз returnprocess = False # Башында s = subprocess. Popen (["ps", "ax"], stdout = subprocess. PIPE) for x in s.stdout: if re.search ("mpg123", x): returnprocess = True if returnprocess == False: os.system ("mpg123 --loop -1 /home/pi/scripts/sounds/whitenoise.mp3 & ") os.system (" python /home/pi/scripts/red.py ") башка: os.system (" killall mpg123 ") os.система ("python /home/pi/scripts/lightsout.py")

Көрүнүп тургандай, мен дагы omxplayerден mpg123ке которулдум, анткени ал жеңил жана колдонууга оңой.

Бирок, мен кандайдыр бир себептерден улам бул скриптти rc.localге койгондо, ал чынында эле баштоодо эч кандай көйгөйсүз иштейт. Бирок аудио чынында эле чыйрак. Мен сценарийди кадимкидей иштеткенде, шыбакта мындай көйгөйлөр жок. Мен муну оңдоп -түзөп жатам, андыктан кимде кандай идея болсо, мага кабарлаңыз! Рахмат.

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