Коничива, уважаемый!

За время вашего отсутствия мы тут вон чего понаписали:

    Китайский экран 16x2 для Raspberry Pi

    13 Апреля

    Судя по всему, рынок "примочек" для Raspberry Pi достиг немалых масштабов, раз внимание на него обратили азиатские производители. Львиная доля их продукции - клоны европейских или американских разработок. Имеет ли смысл связываться с ними? Скорее да, чем нет. Если вы хотите финансово отблагодарить разработчика и простимулировать его к дальнейшему развитию, разумеется, лучше купить более дорогой, но оригинальный продукт. Ну а если же вами движет желание сэкономить, то имеет смысл обратить взор на азиатские товары, хотя и тут есть нюанс. Учитывая, что подавляющее большинство подобных товаров приходит вообще без сопроводительной документации, имеет смысл заранее поискать мануалы или готовые скрипты/библиотеки. Искать их нужно в описании товара или комментариях. В крайнем случае, можно связаться с продавцом. Логичнее было бы обратиться к производителю, но у noname-продуктов его не доищешься. Если необходимая документация есть и покупатели в комментариях подтверждают её актуальность - всё в порядке. В противном случае, работа с такой покупкой может превратиться в замысловатый квест.

    Перейдём от общего к частному и рассмотрим плату расширения с текстовым экраном 16x2 и пятью кнопками от неизвестного азиатского производителя. Она имеет текстовой экран в две строки по 16 символов, RGB-светодиод и пять сенсорных кнопок. Есть также потенциометр для настройки контрастности экрана. Купил я её на banggood за $7.99 и это клон аналогичной платы от Adafruit, ценой в $19.95 (+ почтовые расходы). Китайская плата идёт сразу "готовой к употреблению", то есть в сборе. Ниже можно увидеть, как выглядят оригинальная плата и её китайский названный родственник:

    Что же хорошего в этой плате, кроме цены? Ну, во-первых, она прекрасно подходит к такому корпусу, плотно фиксируясь в его специальных прорезях (с оригинальной платой так не получится).

    А во-вторых, "родство" с Adafruit, которая всегда отличалась отличными мануалами и библиотеками для своих продуктов. К великому счастью, китайская плата оказалась полностью совместима с программным обеспечением Adafruit. Единственной аномалией оказался RGB-светодиод, который наотрез отказывался выдавать запрограммированные цвета. Оказалось, что в нём перепутаны каналы Blue и Green, то есть он получается RBG.

    Немного о python-библиотеке от Adafruit. Она позволяет работать с экраном, светодиодом и кнопками. Так как экран текстовой, поддерживается только описанный в программном обеспечении набор символов и в данном случае это только буквы латиницы, цифры и основные знаки препинания. Также можно создать до девяти собственных символов. Ниже несколько полезных ссылок:

    Вариантов использования такой платы расширения великое множество. Ниже для примера дан скрипт на python, который выполняет следующее:

    • получает данные о погоде в Таллинне с openweathermap.com в формате JSON
    • создаёт специальный символ для обозначения температуры
    • так как описание погоды на русском, конвертирует его в транслитерацию
    • выводит на экран название города, текущую температуру и описание погоды в транслитерации
    • обновляет данные каждые 10 минут, при обновлении светодиод мигает синим

    Скрипт также можно  скачать.

    screen16x2-weather.py

    #!/usr/bin/python
    
    import json
    import urllib2
    from time import sleep
    import Adafruit_CharLCD as LCD
    
    lcd = LCD.Adafruit_CharLCDPlate()
    lcd.set_color(0, 0, 0)
    
    lcd.create_char(1, [24,24,3,4,4,4,3,0])
    
    cyrillic_translit = {
    	u'\u0410': 'A', u'\u0430': 'a',
    	u'\u0411': 'B', u'\u0431': 'b',
    	u'\u0412': 'V', u'\u0432': 'v',
    	u'\u0413': 'G', u'\u0433': 'g',
    	u'\u0414': 'D', u'\u0434': 'd',
    	u'\u0415': 'E', u'\u0435': 'e',
    	u'\u0416': 'Zh', u'\u0436': 'zh',
    	u'\u0417': 'Z', u'\u0437': 'z',
    	u'\u0418': 'I', u'\u0438': 'i',
    	u'\u0419': 'J', u'\u0439': 'j',
    	u'\u041a': 'K', u'\u043a': 'k',
    	u'\u041b': 'L', u'\u043b': 'l',
    	u'\u041c': 'M', u'\u043c': 'm',
    	u'\u041d': 'N', u'\u043d': 'n',
    	u'\u041e': 'O', u'\u043e': 'o',
    	u'\u041f': 'P', u'\u043f': 'p',
    	u'\u0420': 'R', u'\u0440': 'r',
    	u'\u0421': 'S', u'\u0441': 's',
    	u'\u0422': 'T', u'\u0442': 't',
    	u'\u0423': 'U', u'\u0443': 'u',
    	u'\u0424': 'F', u'\u0444': 'f',
    	u'\u0425': 'Kh', u'\u0445': 'kh',
    	u'\u0426': 'Ts', u'\u0446': 'ts',
    	u'\u0427': 'Ch', u'\u0447': 'ch',
    	u'\u0428': 'Sh', u'\u0448': 'sh',
    	u'\u0429': 'Shch', u'\u0449': 'shch',
    	u'\u042a': '"', u'\u044a': '"',
    	u'\u042b': 'Y', u'\u044b': 'y',
    	u'\u042c': "'", u'\u044c': "'",
    	u'\u042d': 'E', u'\u044d': 'e',
    	u'\u042e': 'Ju', u'\u044e': 'ju',
    	u'\u042f': 'Ja', u'\u044f': 'ja'
    }
    
    def transliterate(word, translit_table):
        converted_word = ''
        for char in word:
            transchar = ''
            if char in translit_table:
                transchar = translit_table[char]
            else:
                transchar = char
            converted_word += transchar
        return converted_word
    
    
    while True:
    	data = json.load(urllib2.urlopen('http://api.openweathermap.org/data/2.5/find?q=Tallinn&units=metric&lang=ru'))
    	while True:
    		lcd.set_color(0, 1, 0)
    		sleep(0.1)
    		lcd.set_color(0, 0, 0)
    		break
    
    	lcd.clear()
    	lcd.message(data['list'][0]['name'] + " " + str(data['list'][0]['main']['temp']) + "\x01 \n" + transliterate(unicode(data['list'][0]['weather'][0]['description']), cyrillic_translit))
    
    	sleep(600)
            
    Автор: Lentyay
    

    Всем пофиг до этой статьи и её никто не комментировал. Вы можете стать первым.

    captcha
    RSS