Наконец-то недавно у меня появился собственный 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 г.