Съдържание:

Изградете по -добър бутон за захранване на Raspberry Pi: 4 стъпки
Изградете по -добър бутон за захранване на Raspberry Pi: 4 стъпки

Видео: Изградете по -добър бутон за захранване на Raspberry Pi: 4 стъпки

Видео: Изградете по -добър бутон за захранване на Raspberry Pi: 4 стъпки
Видео: Turning Your Raspberry Pi Pico to Mitsubishi FX1N PLC 2024, Юли
Anonim
Image
Image

Много е лесно да направите бутон за изключване или изключване на малината. Има много такива проекти в мрежата и няколко тук в Instructables, но никой от тях (това мога да видя) не ви казва кога вашият Pi действително е завършил изключването и следователно е безопасно да изтеглите захранването. Всъщност те дори не признават, че натискането на бутон е видяно.

Има и проекти за рестартиране на Pi, който е изключен, но нито те ви дават визуална обратна връзка.

Но кой се нуждае от такъв бутон? Ако сте малко глупак като мен или дори просто амбициозен глупак, винаги можете да влезете във вашия Pi локално или по мрежата и да напишете sudo shutdown -h сега. Но ако изграждате проект за нетехнически потребители, това просто няма да стане. Вярно е, че почти винаги можете да се измъкнете само като издърпате захранващия кабел, но имайте предвид, почти винаги съм казвал! Късметът на всички изтича рано или късно. Една SD карта ми умря едва миналата седмица, въпреки че никога няма да разбера дали това наистина се дължи на рязка загуба на захранване.

В моя случай трябваше да добавя бутон за захранване към Pi, който използваме като midi секвенсор за запис и възпроизвеждане на химни и песни в църквата, когато нямаме пианист на живо. Винаги мога да напиша командата за изключване, но трябва да я премахна, когато не съм там.

Намерението ми тук не е да ви дам завършен продукт, пълен с красиво 3D принтиран калъф, както толкова много други инструктажи. Всеки ще има различна употреба за него или ще иска да го включи в свой собствен проект. По -скоро ще ви запозная с технологията, която можете да добавите към вашия проект, независимо дали е медиен център, IoT устройство или нещо друго.

(Във видеото го демонстрирам с Pi Zero v1.2 и монитор, който направих от пренасочен екран на лаптоп и контролер от Далечния Изток.)

Стъпка 1: Дизайнът

Как работи
Как работи

Ето какво ще направи бутонът ми за захранване:

  • Когато Pi работи, светодиод свети непрекъснато. Ако се изключи ръчно, светодиодът изгасва само когато е безопасно да изключите захранването.
  • По време на работа, ако натиснете бутона за поне секунда, се изключва и светодиодът мига за четвърт секунда всяка секунда, докато не бъде безопасно да изключите захранването.
  • От състояние на изключване (ако захранването не е изключено), натискането на бутона стартира стартирането му и мига светодиода за четвърт секунда всяка секунда, докато се зареди. (Може да отнеме малко повече време, докато всички услуги като ssh и vnc се изпълнят.)

Компонентите са много евтини. Всичко от което се нуждаеш е:

  • ATTiny85 (съвместим с Arduino чип)
  • 3 резистора: 2 x 330Ω и 1 x 10kΩ
  • 1 светодиод - предлагам зелен или син, но това е ваш избор
  • жични платки и джъмпери, или ленти, или както искате да ги изградите.

Стъпка 2: Как работи

Както при всички бутони за захранване на Pi, този издърпва GPIO щифт до ниско състояние, за да сигнализира заявка за изключване към помощна програма, работеща на Pi. Използвах GPIO4 (щифт 7), но можете да използвате всеки друг щифт.

Единственият начин да разберете, че Pi е завършил изключването, е като гледате TxD пин 8, който след това намалява. Това зависи от разрешената серийна конзола, която е по подразбиране. Всъщност TxD редовно ще върви нагоре и надолу, докато се използва като серийна конзола, но никога няма да се понижи за повече от около 30 mS наведнъж, дори и при най -бавната обща скорост на предаване. Той все още може да се използва за серийна конзола, докато просто го гледаме пасивно.

За да рестартираме, трябва за кратко да дърпаме SCL1 (щифт 5) ниско. Този щифт се използва от всички I2C устройства (включително моя midi интерфейс), но след стартиране на зареждането го оставяме на мира.

По -голямата част от сложността е в скицата на Arduino, която зареждаме в ATTiny85. Това реализира "машина на състоянието" - много полезен и мощен начин за кодиране на всеки проблем, който може да бъде представен от редица "състояния". Пералнята работи по същия начин. Състоянията представляват етапите в цикъла на измиване и всяко от тях определя какво трябва да прави машината в този момент (двигатели или помпи, които трябва да работят, клапани, които да се отварят или затварят) и какви входове на сензора (температура, ниво на водата, таймери) определете кога да преминете към следващото състояние и кое следващо състояние да изберете.

Скицата на ръката е първият ми проект на диаграма на състоянието, показващ всички преходи на състояния. Това е само за да ви покажа как първоначално можете да планирате своите състояния и преходи на състояния - може да не е напълно точно, както беше преди да започна отстраняването на грешки.

В нашия случай имаме 6 състояния, които съм нарекъл ИЗКЛЮЧВАНЕ, ЗАЯВКА ЗА ОБУТВАНЕ, ЗАБЪРКВАНЕ, РАБОТА, ЗАЯВКА ЗА ИЗКЛЮЧВАНЕ и ЗАКРИВАНЕ НАДОЛУ. (След изключване се премества обратно в ИЗКЛ.) Те се идентифицират чрез коментари в скицата и за всеки следващ коментар се казва какво трябва да прави и какви събития ще го преместят в друго състояние.

Помощната програма, работеща на Pi, е малко по -сложна, отколкото при повечето бутони за изключване. Той реагира на дълъг нисък импулс на щифта GPIO, като инициира изключване, но също така реагира на кратък импулс, като сам за кратко дърпа ниско GPIO пина. Ето как ATTiny85 може да каже, че работи и така може да премине от състояние BOOTING към състояние RUNNING.

Стъпка 3: Изграждане на демонстрационен прототип

Изграждане на демонстрационен прототип
Изграждане на демонстрационен прототип
Изграждане на демонстрационен прототип
Изграждане на демонстрационен прототип
Изграждане на демонстрационен прототип
Изграждане на демонстрационен прототип

За демонстрационни цели можете да го прототипирате върху макет без запояване, както е показано, но също така ви дадох схемата, за да можете да изработите свое собствено оформление с помощта на лента или персонализирана печатна платка, може би част от по -широк проект.

Стъпка 4: Програмиране на ATTiny85

Скицата на Arduino и помощната програма са приложени към тази стъпка. В папката си за скици на Arduino създайте папка, наречена PiPwr и копирайте файла PiPwr.ino в нея. Стартирайки Arduino IDE, сега ще го намерите в скицата си.

Има няколко начина за програмиране на ATTiny85. Ако на вашия има инсталиран буутлоудър, можете да използвате платка за разработка ATTiny85, която струва само няколко паунда. Това се свързва с вашия компютър чрез USB порт. Използвах Hidiot, който по същество е същият, но с зона за прототипиране.

В IDE на Arduino под Файл - Предпочитания добавете

digistump.com/package_digistump_index.json

към URL адресите на мениджъра на допълнителни табла.

Под Инструменти - Табло сега трябва да видите редица опции на Digispark. Изберете Digispark (По подразбиране - 16.5MHz).

Ако вашият ATTiny85 няма буутлоудър (или не знаете), можете да получите AVR ISP програмист за няколко паунда. Или можете да използвате Arduino Uno или по -евтин Pro Mini или Nano като програмист. Google за „arduino as isp attiny85“(без кавичките) за инструкции.

Ако искате да промените скицата, ще я намерите напълно коментирана и да се надяваме, че е лесна за следване. За отстраняване на грешки е много по -лесно да използвате Arduino Pro Mini или Nano. Декомментирайте serial.begin () в настройката и операторите за печат в loop (), за да видите стъпките, през които преминава, използвайки серийния монитор. В източника има коментирани алтернативни дефиниции на пинове за Uno, Pro Mini или Nano.

На вашия Raspberry Pi копирайте файла shutdown_helper.py в папка/etc/local/bin и го задайте като изпълним с командата

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

Сега редактирайте файла /etc/rc.local с любимия си редактор. (Ще трябва да го направите като root.) Преди последния ред (изход 0) вмъкнете реда

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

Рестартирайте и помощната програма ще стартира автоматично.

Препоръчано: