Talaan ng mga Nilalaman:

Bumuo ng isang Mas Mahusay na Butones ng Lakas ng Raspberry Pi: 4 na Hakbang
Bumuo ng isang Mas Mahusay na Butones ng Lakas ng Raspberry Pi: 4 na Hakbang

Video: Bumuo ng isang Mas Mahusay na Butones ng Lakas ng Raspberry Pi: 4 na Hakbang

Video: Bumuo ng isang Mas Mahusay na Butones ng Lakas ng Raspberry Pi: 4 na Hakbang
Video: Nangungunang 10 henyo na imbensyon! Hindi mo nakikita dati. 2024, Hulyo
Anonim
Image
Image

Napakadali na gumawa ng isang Raspberry power-off o shutdown button. Mayroong maraming mga naturang proyekto sa web at ilang dito sa Mga Instructable, ngunit wala sa kanila (na nakikita ko) ang nagsasabi sa iyo kapag ang iyong Pi ay talagang natapos na mag-shut down at kaya't ligtas na hilahin ang lakas. Sa katunayan hindi man nila kinikilala na nakita ang pindutan ng pindutan.

May mga proyekto din, upang muling simulan ang isang Pi na na-shut down, ngunit hindi rin ito magbibigay sa iyo ng anumang visual na feedback.

Ngunit sino ang nangangailangan ng ganitong pindutan? Kung ikaw ay isang maliit na nerd tulad ko, o kahit isang naghahangad na nerd, maaari kang palaging mag-log in sa iyong Pi nang lokal o sa network at i-type ang sudo shutdown -h ngayon. Ngunit kung nagtatayo ka ng isang proyekto para sa mga hindi pang-teknikal na gumagamit, hindi iyon magagawa. Totoo, maaari mong palaging makalayo sa paghila lamang ng kurdon ng kuryente, ngunit tandaan, sinabi ko na palagi! Ang swerte ng lahat ay maubusan maaga o huli. Nagkaroon ako ng isang SD card na namatay sa akin lamang noong nakaraang linggo, kahit na hindi ko malalaman kung o hindi talaga ito sanhi ng isang biglaang pagkawala ng kuryente.

Sa aking kaso kailangan kong magdagdag ng isang power button sa isang Pi na ginagamit namin bilang isang midi sequencer para sa pagrekord at pagtugtog ng mga himno at kanta sa simbahan, para kapag wala kaming magagamit na live na pianist. Palagi kong nai-type ang shutdown command ngunit kailangan kong de-skill ito para kapag wala ako doon.

Ang aking hangarin dito ay hindi bigyan ka ng isang tapos na produkto, kumpleto sa magandang naka-print na kaso ng 3D, tulad ng maraming iba pang mga Instructable. Ang bawat isa ay magkakaroon ng magkakaibang paggamit para dito o nais na isama sa kanilang sariling proyekto. Sa halip, itatakda ka namin ng teknolohiyang maaari mong idagdag sa iyong proyekto, maging ito man ay isang sentro ng media, isang aparato ng IoT, o anumang iba pa.

(Sa video na ipinapakita ko ito sa isang Pi Zero v1.2 at isang monitor na ginawa ko mula sa isang repurposed laptop screen at isang controller mula sa Malayong Silangan.)

Hakbang 1: Ang Disenyo

Paano Ito Gumagana
Paano Ito Gumagana

Ito ang gagawin para sa iyo ng aking power button:

  • Kapag tumatakbo ang Pi, isang LED ay patuloy na naiilawan. Kung manu-manong na-shut down ang LED ay papatayin lamang kung ligtas na i-unplug ang kuryente.
  • Habang tumatakbo, kung pinindot mo ang pindutan ng kahit isang segundo ay pinasimulan ang isang shutdown at ang LED ay kumikislap para sa isang isang-kapat ng isang segundo bawat segundo hanggang sa ligtas na i-unplug ang kuryente.
  • Mula sa isang estado ng pag-shutdown (kung ang kapangyarihan ay hindi naalis), ang pagpindot sa pindutan ay nagsisimula sa pag-boot at i-flash ang LED sa isang isang-kapat ng isang segundo bawat segundo hanggang sa ma-boot ito. (Maaaring magtagal nang kaunti hanggang sa tumakbo ang lahat ng mga serbisyo tulad ng ssh at vnc.)

Ang mga sangkap ay napaka-mura. Ang kailangan mo lang ay:

  • ATTiny85 (Arduino-compatible chip)
  • 3 resistors: 2 x 330Ω at 1 x 10kΩ
  • 1 LED - Iminumungkahi ko na berde o asul, ngunit ito ang iyong pinili
  • breadboard at jumper wires, o stripboard, o gayunpaman nais mong buuin ito.

Hakbang 2: Paano Ito Gumagana

Tulad ng lahat ng mga pindutan ng kuryente ng Pi, ang isang ito ay kumukuha ng isang GPIO pin sa isang mababang estado upang senyasan ang isang kahilingan sa pag-shutdown sa isang helper program na tumatakbo sa Pi. Gumamit ako ng GPIO4 (pin 7) ngunit maaari mong gamitin ang anumang iba pang mga pin.

Ang tanging paraan lamang upang masabi na ang isang Pi ay nakumpleto ang pag-shutdown ay sa pamamagitan ng panonood ng TxD pin 8, na pagkatapos ay bumababa. Nakasalalay ito sa paganahin ang serial console, na kung saan ito ay bilang default. Sa katunayan ang TxD ay regular na pataas at pababa habang ginagamit ito bilang isang serial console, ngunit hindi ito bababa sa higit sa halos 30mS nang paisa-isa, kahit na sa pinakamabagal na karaniwang rate ng baud. Maaari pa rin itong magamit para sa isang serial console dahil papanood lamang namin ito.

Upang mag-reboot, kailangan nating hilahin ang maikling SCL1 (pin 5) na mababa. Ang pin na ito ay ginagamit ng anumang mga aparato ng I2C (kasama ang aking interface na midi), ngunit pagkatapos na simulan ang boot ay pabayaan naming mag-isa ito.

Karamihan sa pagiging kumplikado ay nasa sketch ng Arduino na ikinakarga namin sa ATTiny85. Nagpapatupad ito ng isang "machine ng estado" - isang napaka-kapaki-pakinabang at malakas na paraan ng pag-coding ng anumang problema na maaaring kinatawan ng isang bilang ng mga "estado". Ang isang washing machine ay gumagana sa parehong paraan. Kinakatawan ng mga estado ang mga yugto sa ikot ng paghuhugas, at tinutukoy ng bawat isa kung ano ang dapat gawin ng makina sa puntong iyon (mga motor o pump na tatakbo, mga balbula na bubuksan o isara) at kung anong mga input ng sensor (temperatura, antas ng tubig, mga timer) matukoy kung kailan lilipat sa susunod na estado at kung aling susunod na estado ang pipiliin.

Ang sketch ng kamay ay ang aking unang draft ng isang diagram ng estado, na ipinapakita ang lahat ng mga paglipat ng estado. Ito ay upang maipakita sa iyo kung paano mo maipaplano ang una ang iyong mga estado at paglipat ng estado - maaaring hindi ito ganap na tumpak tulad ng dati bago ako magsimulang mag-debug.

Sa aming kaso, mayroon kaming 6 na estado na tinawag kong OFF, BOOT REQUEST, BOOTING, RUNNING, SHUTDOWN REQUEST, at SHUTTING Down. (Pagkatapos ng PAG-SHUTTING Down, babalik ito sa OFF.) Nakikilala ito sa pamamagitan ng mga komento sa sketch, at para sa bawat isa, sinabi ng karagdagang mga komento kung ano ang dapat gawin at kung anong mga kaganapan ang maglilipat nito sa ibang estado.

Ang programa ng helper na tumatakbo sa Pi ay medyo mas kumplikado kaysa sa karamihan sa mga pindutan ng pag-shutdown. Tumutugon ito sa isang mahabang mababang pulso sa GPIO pin sa pamamagitan ng pagpapasimula ng isang shutdown, ngunit tumutugon din ito sa isang maikling pulso sa pamamagitan ng sarili nitong sandaling hilahin ang GPIO pin na mababa. Ito ay kung paano masasabi ng ATTiny85 na tumatakbo ito at sa gayon ay maaaring lumipat mula sa BOOTING patungo sa tumatakbo na estado.

Hakbang 3: Pagbuo ng isang Demo na Prototype

Pagbuo ng isang Demo na Prototype
Pagbuo ng isang Demo na Prototype
Pagbuo ng isang Demo na Prototype
Pagbuo ng isang Demo na Prototype
Pagbuo ng isang Demo na Prototype
Pagbuo ng isang Demo na Prototype

Para sa mga layunin ng demonstrasyon maaari mo itong i-prototype sa isang solderless breadboard tulad ng ipinakita ngunit binigyan din kita ng iskema upang magawa mo ang iyong sariling layout gamit ang stripboard o isang pasadyang PCB, marahil bahagi ng isang mas malawak na proyekto.

Hakbang 4: Programming ang ATTiny85

Ang Arduino sketch at ang helper program ay naka-attach sa hakbang na ito. Sa iyong Arduino sketches folder, lumikha ng isang folder na tinatawag na PiPwr at kopyahin ang file na PiPwr.ino dito. Paglunsad ng Arduino IDE ay mahahanap mo ito sa iyong sketchbook.

Mayroong maraming mga paraan ng pag-program ng isang ATTiny85. Kung ang sa iyo ay may naka-install na bootloader maaari kang gumamit ng isang ATTiny85 development board na nagkakahalaga lamang ng ilang pounds. Kumokonekta ito sa iyong PC sa pamamagitan ng isang USB port. Gumamit ako ng isang Hidiot na kung saan ay mahalagang pareho ngunit may isang prototyping area.

Sa Arduino IDE sa ilalim ng File - Mga Kagustuhan, idagdag

digistump.com/package_digistump_index.json

sa Mga karagdagang board manager URL.

Sa ilalim ng Mga Tool - Lupon dapat mo na ngayong makita ang isang bilang ng mga pagpipilian sa Digispark. Piliin ang Digispark (Default - 16.5MHz).

Kung ang iyong ATTiny85 ay walang bootloader (o hindi mo alam) pagkatapos ay maaari kang makakuha ng isang AVR ISP programmer para sa ilang pounds. O maaari mong gamitin ang isang Arduino Uno o mas murang Pro Mini o Nano bilang isang programmer. Google para sa "arduino as isp attiny85" (nang walang mga quote) para sa mga tagubilin.

Kung nais mong baguhin ang sketch makikita mo ito ng ganap na nagkomento at sana madaling sundin. Para sa pag-debug mas madaling gamitin ang isang Arduino Pro Mini o Nano. I-uncomment ang serial.begin () sa Pag-setup at ang mga pahayag na naka-print sa loop () upang makita ang mga hakbang na dumadaan dito gamit ang serial monitor. Mayroong mga kahaliling kahulugan ng pin sa pinagmulan, nagkomento, para sa isang Uno, Pro Mini o Nano.

Sa iyong Raspberry Pi, kopyahin ang file shutdown_helper.py sa folder / etc / local / bin at itakda ito bilang maipapatupad ng utos

sudo chmod + x /usr/local/bin/shutdown_helper.py

Ngayon i-edit ang file /etc/rc.local sa iyong paboritong editor. (Kakailanganin mong gawin ito bilang ugat.) Bago ang huling linya (exit 0) ipasok ang linya

nohup /usr/local/bin/shutdown_helper.py &

Reboot, at ang program ng helper ay awtomatikong magsisimulang.

Inirerekumendang: