Использую Xfce4 и xscreensaver в качестве блокировщика экрана. Настройки питания и энергосбережения через xfce-power-manager. С одной стороны это позволяет иметь различные настройки энергосбережения экрана в зависимости от источника питания (батарея или сеть), а с другой не возиться с настройкой heartbeat'а (xscreensaver-command -deactivate) в различных программах.
Моя проблема заключается в настройке dpmsEnabled в xscreensaver - если она выключена, то xscreensaver полностью отключает поддержку DPMS, а не прекращает управлять ее настройками.
Чтобы отучить xscreensaver трогать настройки DPMS я собираю отдельный пакет с опцией --without-dpms-ext и патчем, который чинит эту опцию
Заметки о Linux, системном администрировании, программировании, электронике и не только
воскресенье, 11 февраля 2018 г.
вторник, 6 февраля 2018 г.
Просмотр изображений с расширением HEIC в Linux
Столкнулся с проблемой просмотра фотографий с расширением HEIC. Это новый формат HEIF (High Efficiency Image Format) от Apple, которым они решили заменить JPEG. Перебрал несколько вариантов (display, eog, gimp), но ни одна из программ не знает про этот формат.
Поиск в интернете вывел на tifig. С помощью этой утилиты получилось сконвертировать фотографии в JPEG.
К слову разница в размере не в пользу JPEG:
Качество изображения оценить не могу, т.к. не могу увидеть оригинал в исходном качестве.
Поиск в интернете вывел на tifig. С помощью этой утилиты получилось сконвертировать фотографии в JPEG.
$ find /path/to/photos -type f -iname '*.heic' -exec ~/tmp/tifig -i '{}' -o '{}.JPG' \; $ rename 's/.HEIC.JPG/.JPG/' *.HEIC.JPG
К слову разница в размере не в пользу JPEG:
$ ls -l IMG_0513.* -rw-r--r-- 1 andrey andrey 1360434 Feb 6 13:11 IMG_0513.HEIC -rw-r--r-- 1 andrey andrey 2077232 Feb 6 13:26 IMG_0513.JPG
Качество изображения оценить не могу, т.к. не могу увидеть оригинал в исходном качестве.
суббота, 13 января 2018 г.
Прошивка ESPEasy для ESP8266
Открыл для себя прошивку ESPEasy от Let's Control It для ESP8266. ESPEasy собирается с разным набором модулей и доступна для различных объемов flash памяти. Я буду заливать прошивку в ESP-12S, который купил ранее и мне нужно узнать какой объем flash памяти установлен на моих чипах.
Согласно информации проекта CoreBoot в модуле установлен чип Winbond W25Q32, содержащий 4MB памяти.
Если проверить модули ESP-01, с которых я начинал знакомство с ESP8266, то выдает следуещее:
Если верить CoreBoot, то должна быть установлена GigaDevice GD25Q40, и в подтверждение тому на плате стоит GD25Q41BT, имеющая объем flash памяти 4Mb или 512kB.
Скачать прошивку с GitHub можно здесь. Я брал ESP_Easy_v2.0-20180113_test_ESP8266_4096.bin чтобы была поддержка датчика углекислого газа MH-Z19.
Для заливки прошивки можно использовать esptool из Arduino или esptool.py. Я использую первый из них.
После сброса в сети появится новая точка доступа с именем "ESP_Easy_0" (пароль "configesp"). При подключении к ней телефон определил captivate portal в котором предлагается настроить подключение к WiFi.
К одному из модулей у меня подключены BME280 и MH-Z19, а ко второму SI7021. Оба датчика показывают очень близкие значения температуры и влажности, когда находятся рядом, но BME280 примерно в два раза дороже.
К обоим модулям подключены OLED экраны разрешением 128x64 на базе контроллера SSD1306. Данные передаются по MQTT в Mosquitto из которого Munin забирает их для построения графиков. В дальнейшем хочу перейти на что-то вроде MajorDomo, OpenHAD или Domoticz.
Для защиты от выгорания экран включается на 15 секунд по нажатию на кнопку flash (подключена к gpio-0).
На экран выводятся значения температуры, влажности и концентрации углекислого газа в воздухе.
Основная информация по работе прошивки.
Настройки прошивки: название юнита, настройки WiFi, статическая конфигурация сети (если нужно).
Настройки контроллеров. Я использую MQTT брокер Mosquitto.
Настройки выходов при загрузке.
Конфигурация подключенных датчиков. На этом модуле сконфигурирован экран SSD1306, BME280 и MH-Z19.
Нотификации я не использую, т.к. для этого у меня есть Nagios и Munin.
Раздел с инструментами. Из интересного /log и /json. Оба можно использовать для мониторинга устройства.
Прошивка выглядит очень интересной. Надеюсь проблем со стабильностью ее работы также не возникнет.
$ ./esptool.py --port /dev/ttyUSB0 --baud 115200 flash_id Connecting... Manufacturer: ef Device: 4016
Согласно информации проекта CoreBoot в модуле установлен чип Winbond W25Q32, содержащий 4MB памяти.
Если проверить модули ESP-01, с которых я начинал знакомство с ESP8266, то выдает следуещее:
$ ./esptool.py --port /dev/ttyUSB0 --baud 115200 flash_id Connecting... Manufacturer: c8 Device: 4013
Если верить CoreBoot, то должна быть установлена GigaDevice GD25Q40, и в подтверждение тому на плате стоит GD25Q41BT, имеющая объем flash памяти 4Mb или 512kB.
Скачать прошивку с GitHub можно здесь. Я брал ESP_Easy_v2.0-20180113_test_ESP8266_4096.bin чтобы была поддержка датчика углекислого газа MH-Z19.
Для заливки прошивки можно использовать esptool из Arduino или esptool.py. Я использую первый из них.
$ ~/.arduino15/packages/esp8266/tools/esptool/0.4.8/esptool -vv -cd nodemcu -cb 115200 -cp /dev/ttyUSB0 -ca 0x00000 -cf ~/tmp/ESP_Easy_v2.0-20180113_test_ESP8266_4096.bin esptool v0.4.8 - (c) 2014 Ch. Klippel setting board to nodemcu setting baudrate from 115200 to 115200 setting port from /dev/ttyUSB0 to /dev/ttyUSB0 setting address from 0x00000000 to 0x00000000 espcomm_upload_file espcomm_upload_mem opening port /dev/ttyUSB0 at 115200 tcgetattr tcsetattr serial open opening bootloader resetting board trying to connect setting character timeout 0 done setting character timeout 1 done espcomm_send_command: sending command header espcomm_send_command: sending command payload trying to connect setting character timeout 0 done setting character timeout 1 done espcomm_send_command: sending command header espcomm_send_command: sending command payload espcomm_send_command: receiving 2 bytes of data espcomm_send_command: receiving 2 bytes of data espcomm_send_command: receiving 2 bytes of data espcomm_send_command: receiving 2 bytes of data espcomm_send_command: receiving 2 bytes of data espcomm_send_command: receiving 2 bytes of data espcomm_send_command: receiving 2 bytes of data espcomm_send_command: receiving 2 bytes of data Uploading 566528 bytes from to flash at 0x00000000 erasing flash size: 08a500 address: 000000 first_sector_index: 0 total_sector_count: 139 head_sector_count: 16 adjusted_sector_count: 123 erase_size: 07b000 espcomm_send_command: sending command header espcomm_send_command: sending command payload setting timeout 15000 setting character timeout 150 done setting timeout 1 setting character timeout 1 done espcomm_send_command: receiving 2 bytes of data writing flash .................................................. starting app without reboot espcomm_send_command: sending command header espcomm_send_command: sending command payload espcomm_send_command: receiving 2 bytes of data closing bootloader
После сброса в сети появится новая точка доступа с именем "ESP_Easy_0" (пароль "configesp"). При подключении к ней телефон определил captivate portal в котором предлагается настроить подключение к WiFi.
К одному из модулей у меня подключены BME280 и MH-Z19, а ко второму SI7021. Оба датчика показывают очень близкие значения температуры и влажности, когда находятся рядом, но BME280 примерно в два раза дороже.
К обоим модулям подключены OLED экраны разрешением 128x64 на базе контроллера SSD1306. Данные передаются по MQTT в Mosquitto из которого Munin забирает их для построения графиков. В дальнейшем хочу перейти на что-то вроде MajorDomo, OpenHAD или Domoticz.
Для защиты от выгорания экран включается на 15 секунд по нажатию на кнопку flash (подключена к gpio-0).
На экран выводятся значения температуры, влажности и концентрации углекислого газа в воздухе.
Основная информация по работе прошивки.
Настройки прошивки: название юнита, настройки WiFi, статическая конфигурация сети (если нужно).
Настройки контроллеров. Я использую MQTT брокер Mosquitto.
Настройки выходов при загрузке.
Конфигурация подключенных датчиков. На этом модуле сконфигурирован экран SSD1306, BME280 и MH-Z19.
Нотификации я не использую, т.к. для этого у меня есть Nagios и Munin.
Раздел с инструментами. Из интересного /log и /json. Оба можно использовать для мониторинга устройства.
Прошивка выглядит очень интересной. Надеюсь проблем со стабильностью ее работы также не возникнет.
воскресенье, 19 ноября 2017 г.
Стоит разбить экран и смартфон становится бесполезных хламом
Недавно LG Nexus 5 неудачно спланировал с высоты примерно 1.5 метров на пол. Результат разбитый сенсор и экран, показывающий ворох цветных линий.
Ремонтировать такой телефон экономически невыгодно - за неоригинальный экран в Минске просят 60-70 рублей (примерно 35$). А еще его нужно заменить, не угробив телефон окончательно. Б/у Nexus 5 стоит 150-200 рублей в зависимости от состояния. В общем имеет смысл скопировать информацию, очистить телефон и продать на запчасти.
Подключаю телефон к компу, но файлов не вижу - по-умолчанию включен режим заряда от USB. Изменить это поведение можно в настройках разработчика, но сначала нужно попасть в эти настройки.
Подключил мышку через USB-OTG переходник и экспериментальным путем нашел точку на экране, нажатие на которую дает небольшую область слева, где с трудом, но можно прочесть текст. Вращая телефон между альбомной и портретной ориентациями "нащупал" нужную опцию и сбросил файлы.
Данные с телефона стер через веб-версию Play Market, использую функцию поиска телефона.
Я пробовал установить софт проде AirDroid для управления телефоном с компьютера, но не смог запустить этот софт удаленно. Включить ADB тоже оказалось непросто, т.к. при попытке использования выскакивает запрос в центре экрана, а эту область увидеть не получилось.
Есть возможность подключить телефон к телевизору или монитору через HDMI, но у меня нет такого переходника:
Теперь остался вопрос - что взять на замену. Скорее всего буду брать еще один Xiaomi Mi4c и прошивать его на LineageOS 14.1.
Ремонтировать такой телефон экономически невыгодно - за неоригинальный экран в Минске просят 60-70 рублей (примерно 35$). А еще его нужно заменить, не угробив телефон окончательно. Б/у Nexus 5 стоит 150-200 рублей в зависимости от состояния. В общем имеет смысл скопировать информацию, очистить телефон и продать на запчасти.
Подключаю телефон к компу, но файлов не вижу - по-умолчанию включен режим заряда от USB. Изменить это поведение можно в настройках разработчика, но сначала нужно попасть в эти настройки.
Подключил мышку через USB-OTG переходник и экспериментальным путем нашел точку на экране, нажатие на которую дает небольшую область слева, где с трудом, но можно прочесть текст. Вращая телефон между альбомной и портретной ориентациями "нащупал" нужную опцию и сбросил файлы.
Данные с телефона стер через веб-версию Play Market, использую функцию поиска телефона.
Я пробовал установить софт проде AirDroid для управления телефоном с компьютера, но не смог запустить этот софт удаленно. Включить ADB тоже оказалось непросто, т.к. при попытке использования выскакивает запрос в центре экрана, а эту область увидеть не получилось.
Есть возможность подключить телефон к телевизору или монитору через HDMI, но у меня нет такого переходника:
Теперь остался вопрос - что взять на замену. Скорее всего буду брать еще один Xiaomi Mi4c и прошивать его на LineageOS 14.1.
пятница, 10 ноября 2017 г.
Использование STM32F103C8T6 в Arduino IDE
Разобрался как использовать плату на базе контроллера STM32F103C8T6 в Arduino. Мой вариант платы выглядит вот так
В wiki сайта stm32duino.com такая плата называется Blue Pill. И эта плата имеет несколько недостатков, которые относительно просто устранить имея под рукой паяльник.
Крепление micro-usb разъема не внушает доверие - я пропаял его. USB D+ пин подтянут к питанию через резистор номиналом 10k, но чтобы устройство определилось на шине USB как Full Speed, нужно подтягивать USB D+ к питанию через резистор номиналом 1,5k. Гуру smd пайки могут заменить на плате резистор R10, но я выбрал вариант с подключением резистора номиналом 1,8k между пинами PA12 (на этот пин выведен USB D+) и 3.3v.
Прошивку можно заливать через USB-UART преобразователь. Для этого нужно переключить преобразователь в режим 3,3V и подключить выводы согласно таблице (в комментарии подсказали, что выводы PA9/PA10 толерантны к 5V)
В настройках Arduino IDE нужно добавить поддержку SMT32F103 (File / Preferences / Additional Boards Manager URL):
http://dan.drown.org/stm32duino/package_STM32duino_index.json
В Boards Manager (Tools / Board / Boards Manager) установить "SMT32F1xx/GD32F1xx boards by smt32duino" и активировать загрузку прошивки через Serial (Tools / Upload method / Serial). На плате нужно переключить перемычку BOOT0 в High, а BOOT1 в Low. После этого нужно сбросить плату и можно заливать скетчи. Для нормальной работы прошивки BOOT0 и BOOT1 должны быть в состоянии Low.
Но лично я рекомендую прошить STM32duino bootloader и пользоваться загрузкой скетча через USB. Для этого подключаем плату через USB-UART преобразователь, как описано выше. Затем в консоли выполняем команды
Мне еще потребовалось подправить правила UDEV, чтобы ModemManager, libmtp и UDisks не трогали плату:
В начале файла /lib/udev/rules.d/69-libmtp.rules добавить
После этого выполнить
Мне пришлось перезагрузить компьютер - в моем случае UDisks не отставал от платы без перезагрузки. После этого отключить USB-UART преобразователь, выставить перемычки BOOT0 и BOOT1 в Low и подключить плату к компьютеру через USB. Теперь выбираем в Arduino IDE тип загрузки "STM32duino bootloader" (Tools / Upload method / STM32duino bootloader).
Первую загрузку скетча нужно делать включив режим infinite в загрузчике. Для этого подключается резистор номиналом 10k между 3,3v и PC14. После сброса светодиод на плате начинает постоянно мигать, что означает что загрузчик будет ждать начала загрузки без ограничения по времени. После первой загрузки этот режим можно выключить и дальше пользоваться платой как обычно.
Последовательный порт платы опознается в Linux как /dev/ttyACM0 и его нужно выбрать в "Tools / Port" чтобы работал Serial Monitor.
В Arduino IDE 1.6.8 у меня были ошибки при компиляции и я обновился до Arduino IDE 1.8.5. Для проверки работы платы можно использовать пример Blink (File / Examples / 01.Basics / Blink).
В wiki сайта stm32duino.com такая плата называется Blue Pill. И эта плата имеет несколько недостатков, которые относительно просто устранить имея под рукой паяльник.
Крепление micro-usb разъема не внушает доверие - я пропаял его. USB D+ пин подтянут к питанию через резистор номиналом 10k, но чтобы устройство определилось на шине USB как Full Speed, нужно подтягивать USB D+ к питанию через резистор номиналом 1,5k. Гуру smd пайки могут заменить на плате резистор R10, но я выбрал вариант с подключением резистора номиналом 1,8k между пинами PA12 (на этот пин выведен USB D+) и 3.3v.
Прошивку можно заливать через USB-UART преобразователь. Для этого нужно переключить преобразователь в режим 3,3V и подключить выводы согласно таблице (в комментарии подсказали, что выводы PA9/PA10 толерантны к 5V)
USB-UART | Blue Pill |
---|---|
Gnd | Gnd |
Vcc | 3.3V |
RX | PA9 |
TX | PA10 |
В настройках Arduino IDE нужно добавить поддержку SMT32F103 (File / Preferences / Additional Boards Manager URL):
http://dan.drown.org/stm32duino/package_STM32duino_index.json
В Boards Manager (Tools / Board / Boards Manager) установить "SMT32F1xx/GD32F1xx boards by smt32duino" и активировать загрузку прошивки через Serial (Tools / Upload method / Serial). На плате нужно переключить перемычку BOOT0 в High, а BOOT1 в Low. После этого нужно сбросить плату и можно заливать скетчи. Для нормальной работы прошивки BOOT0 и BOOT1 должны быть в состоянии Low.
Но лично я рекомендую прошить STM32duino bootloader и пользоваться загрузкой скетча через USB. Для этого подключаем плату через USB-UART преобразователь, как описано выше. Затем в консоли выполняем команды
$ wget -P /tmp https://github.com/rogerclarkmelbourne/STM32duino-bootloader/raw/master/binaries/generic_boot20_pc13.bin $ cd ~/.arduino15/packages/stm32duino/tools/stm32tools/2017.11.8/linux/stm32flash $ ./stm32flash -w /tmp/generic_boot20_pc13.bin -v -g 0x0 /dev/ttyUSB0
Мне еще потребовалось подправить правила UDEV, чтобы ModemManager, libmtp и UDisks не трогали плату:
$ cat /etc/udev/rules.d/45-usbprog.rules # STM32duino USB bootloader ATTRS{idProduct}=="1001", ATTRS{idVendor}=="0110", MODE="0660", GROUP="plugdev", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_IGNORE}="1" ATTRS{idProduct}=="1002", ATTRS{idVendor}=="0110", MODE="0660", GROUP="plugdev", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_IGNORE}="1" ATTRS{idProduct}=="0003", ATTRS{idVendor}=="1eaf", MODE="0660", GROUP="plugdev" SYMLINK+="maple", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_IGNORE}="1" ATTRS{idProduct}=="0004", ATTRS{idVendor}=="1eaf", MODE="0660", GROUP="plugdev" SYMLINK+="maple", ENV{ID_MM_DEVICE_IGNORE}="1", ENV{UDISKS_PRESENTATION_HIDE}="1", ENV{UDISKS_IGNORE}="1"
В начале файла /lib/udev/rules.d/69-libmtp.rules добавить
# STM32duino USB bootloader ATTR{idVendor}=="1eaf", GOTO="libmtp_rules_end" ATTR{idVendor}=="0110", GOTO="libmtp_rules_end"
После этого выполнить
$ sudo udevadm control --reload-rules
Мне пришлось перезагрузить компьютер - в моем случае UDisks не отставал от платы без перезагрузки. После этого отключить USB-UART преобразователь, выставить перемычки BOOT0 и BOOT1 в Low и подключить плату к компьютеру через USB. Теперь выбираем в Arduino IDE тип загрузки "STM32duino bootloader" (Tools / Upload method / STM32duino bootloader).
Первую загрузку скетча нужно делать включив режим infinite в загрузчике. Для этого подключается резистор номиналом 10k между 3,3v и PC14. После сброса светодиод на плате начинает постоянно мигать, что означает что загрузчик будет ждать начала загрузки без ограничения по времени. После первой загрузки этот режим можно выключить и дальше пользоваться платой как обычно.
Последовательный порт платы опознается в Linux как /dev/ttyACM0 и его нужно выбрать в "Tools / Port" чтобы работал Serial Monitor.
В Arduino IDE 1.6.8 у меня были ошибки при компиляции и я обновился до Arduino IDE 1.8.5. Для проверки работы платы можно использовать пример Blink (File / Examples / 01.Basics / Blink).
OpenTasks не показывает задачи после запуска
Если вы используете OpenTasks (Play Market, F-Droid), то возможно столкнулись с ситуацией когда приложение показывает задачи не сразу после запуска, а секунд через 10-15. Если активно использовать задачи, то такое поведение начинает раздражать.
У меня эта проблема проявилась на LineageOS 14.1 (Android 7.1.2). Чтобы исправить ситуацию достаточно выдать приложению разрешения "Contacts" (Settings / Apps / OpenTasks / Permissions). Заодно я включил два разрешения, помеченных как дополнительные: "read tasks" и "write tasks" (Settings / Apps / OpenTasks / Permissions / Additional permissions).
Теперь список задач виден сразу после запуска приложения.
У меня эта проблема проявилась на LineageOS 14.1 (Android 7.1.2). Чтобы исправить ситуацию достаточно выдать приложению разрешения "Contacts" (Settings / Apps / OpenTasks / Permissions). Заодно я включил два разрешения, помеченных как дополнительные: "read tasks" и "write tasks" (Settings / Apps / OpenTasks / Permissions / Additional permissions).
Теперь список задач виден сразу после запуска приложения.
вторник, 31 октября 2017 г.
Тестирование OLED экрана 128x64
Сегодня пришли два монохромных OLED экрана с диагональю 0.96" и разрешением 128x64. Один из экранов собираюсь добавить в мой проект arduino-air-sensors, а второй - в радио-будильник для детей. О последнем я напишу отдельно, когда будет готово управление и индикация.
Модуль экрана использует контроллер SSD1306 и имеет четыре вывода: Gnd, Vcc, SCL, SDA. Подключение к Arduino выглядит так:
Скачал библиотеки Adafruit_GFX и Adafruit_SSD1306. В последней нужно отредактировать файл Adafruit_SSD1306.h чтобы выбрать i2c адрес 0x3C и разрешение 128x64.
После этого залил минимальный скетч для инициализации экрана
Результат работы скетча:
В примерах библиотеки Adafruit_SSD1306 есть неплохая демка с элементами анимации.
Модуль экрана использует контроллер SSD1306 и имеет четыре вывода: Gnd, Vcc, SCL, SDA. Подключение к Arduino выглядит так:
OLED | Arduino |
---|---|
Gnd | Gnd |
Vcc | 5V |
SCL | A4 |
SDA | A5 |
Скачал библиотеки Adafruit_GFX и Adafruit_SSD1306. В последней нужно отредактировать файл Adafruit_SSD1306.h чтобы выбрать i2c адрес 0x3C и разрешение 128x64.
#define SSD1306_I2C_ADDRESS 0x3C #define SSD1306_128_64
После этого залил минимальный скетч для инициализации экрана
#include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> Adafruit_SSD1306 display; void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.display(); } void loop() { }
Результат работы скетча:
В примерах библиотеки Adafruit_SSD1306 есть неплохая демка с элементами анимации.
Подписаться на:
Сообщения (Atom)