Наконец-то недавно у меня появился собственный raspberry pi, с которым можно было повозиться, и я должен сказать, что совсем не разочарован. Хотя я мог бы рассказать о крошечных компьютерах и их огромном потенциале благодаря нашим усилиям в области повсеместных вычислений и Интернета вещей, я не буду этого делать.
Однако я покажу вам свой проект «hello world», который я сделал, чтобы проверить возможности моего Pi 3. Я хотел создать программу, которая интерпретировала бы простой текст (слова из набора из 26 символов английского алфавита) в азбуку Морзе с помощью светодиод. Как я понял из всех материалов о Raspberry Pi, которые я читал в Интернете, питание светодиода — это самое основное приложение, поэтому я решил немного увеличить его для собственного обучения. Это дало мне хороший шанс познакомиться с манипуляциями с GPIO и построением примитивных схем, так что это было довольно круто. Но я отвлекся; на проект!
Прежде чем перейти к какому-либо коду, я должен показать схему:
В идеале это должно было прояснить ситуацию, но я ужасный фотограф. У меня есть последовательное соединение между контактом 3 (GPIO 2), светодиодом, резистором на 330 Ом и контактом 39 (GND). Таким образом, весь контроль над этим исходит от моих манипуляций с выходом GPIO 2.
Первое, что я сделал, это сделал пакет для отображения азбуки Морзе:
Morse.py
Alphabet = { "A" : [1,0], "B" : [0,1,1,1], "C" : [0,1,0,1], "D" : [0,1,1], "E" : [1], "F" : [1,1,0,1], "G" : [0,0,1], "H" : [1,1,1,1], "I" : [1,1], "J" : [1,0,0,0], "K" : [0,1,0], "L" : [1,0,1,1], "M" : [0,0], "N" : [0,1], "O" : [0,0,0], "P" : [1,0,0,1], "Q" : [0,0,1,0], "R" : [1,0,1], "S" : [1,1,1], "T" : [0], "U" : [1,1,0], "V" : [1,1,1,0], "W" : [1,0,0], "X" : [0,1,1,0], "Y" : [0,1,0,0], "Z" : [0,0,1,1] }
Установив словарь, нужно было настроить плату на получение команд:
"Исходный код"
from Jarvis import Morse import RPi.GPIO import time PIN = 2 # The GPIO Pin you want to use, really. I like 2. 2 is a good number. Be like 2. WAIT = 0.3 # Wait time between beeps DAH_WAIT = 0.6 # Wait time between dashes gpio = RPi.GPIO gpio.setmode(gpio.BCM) gpio.setup(PIN, gpio.OUT)
А затем нужно было просто определить функцию для интерпретации полученных писем:
def speak(morse_list): for dit in morse_list: if dit == 1: gpio.output(PIN, True) # True or gpio.HIGH. Whatevs. time.sleep(WAIT) gpio.output(PIN, False) time.sleep(WAIT) else: gpio.output(PIN, True) # or gpio.LOW time.sleep(DAH_WAIT) gpio.output(PIN, False) time.sleep(WAIT) def cleanup(): gpio.cleanup() #It's always a good idea to clean up after yourself
И вот, наконец, собираем:
if __name__ == "__main__": #str.upper, since I lazily defined the chars as only capital letters text = str.upper(raw_input('Enter your sentence (A-Z only): ')) for char in text: speak(Morse.Alphabet[char]) cleanup()
И вуаля! Пи ждет вашей команды, чтобы заговорить на языке Морзе!
Это очень простой способ, который хорошо работает только для отдельных слов, например, для сигнала "SOS". С тех пор я немного усовершенствовал это, чтобы лучше размещать предложения (без знаков препинания). Если хотите, вы можете взять это в качестве упражнения, но я, кстати, выложил его на свой github. Паузы между буквами и словами также сделаны очевидными для облегчения расшифровки. Не стесняйтесь проверить его и поэкспериментировать с ним самостоятельно!
Первоначально опубликовано на www.pkopoku.com 13 октября 2016 г.