Недавно 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.
Заметки о Linux, системном администрировании, программировании, электронике и не только
воскресенье, 19 ноября 2017 г.
пятница, 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 есть неплохая демка с элементами анимации.
воскресенье, 29 октября 2017 г.
ESP8266 + AM2302 + MH-Z19
Это продолжение поста про слежение за "погодой" в доме.
Пришли заказанные в августе модули ESP8266 ESP-12S. Запаял их на платы и приступил к переделке проекта arduino-air-sensors.
На плате есть два резистора по 10k и один резистор-перемычка. Один из резисторов на 10k подтягивает ch_pd к питанию, а второй - gpio15 к земле. Чтобы плата запускалась без проблем еще нужно подтянуть gpio0 и gpio2 к питанию через резисторы номиналом 10k. Во время заливки прошивки нужно подтянуть gpio0 к земле.
На нижней стороне платы есть место для стабилизатора напряжения на 3,3V и при его отстутствии нужен резистор-перемычка, который соединяет вход и выход питания для стабилизатора.
Но не спешите запаивать туда популярный AMS1117-3.3. Нужен стабилизатор, имеющий порядок выводов "Gnd, Vin, Vout", а у AMS1117 порядок выводов "Gnd, Vout, Vin". Можно попробовать MCP1700 в корпусе SOT-23 или SOT-89, но в этом случае максимальное входное напряжение не должно превышать 6V, а выходной ток - 250mA. Я не пробовал такое подключение, но при работе от USB или 3-х батареек AA должно работать.
Переписал скетч с Ethernet Shield на ESP8266 и добавил в проект схему в формате Eagle и PNG.
Для проверки надежности запустил siege на список урлов, которые поддерживает прошивка. Если за сутки ничего не отвалится и не зависнет, то можно говорить о какой-то надежности. Напомню, что версия на Ethernet Shield зависала случайным образом проработав от нескольких часов до суток и более.
На плате есть два резистора по 10k и один резистор-перемычка. Один из резисторов на 10k подтягивает ch_pd к питанию, а второй - gpio15 к земле. Чтобы плата запускалась без проблем еще нужно подтянуть gpio0 и gpio2 к питанию через резисторы номиналом 10k. Во время заливки прошивки нужно подтянуть gpio0 к земле.
Mode | gpio0 | gpio2 | gpio15 |
---|---|---|---|
UART Download Mode (Programming) | 0 | 1 | 0 |
Flash Startup (Normal) | 1 | 1 | 0 |
SD-Card Boot | 0 | 0 | 1 |
На нижней стороне платы есть место для стабилизатора напряжения на 3,3V и при его отстутствии нужен резистор-перемычка, который соединяет вход и выход питания для стабилизатора.
Но не спешите запаивать туда популярный AMS1117-3.3. Нужен стабилизатор, имеющий порядок выводов "Gnd, Vin, Vout", а у AMS1117 порядок выводов "Gnd, Vout, Vin". Можно попробовать MCP1700 в корпусе SOT-23 или SOT-89, но в этом случае максимальное входное напряжение не должно превышать 6V, а выходной ток - 250mA. Я не пробовал такое подключение, но при работе от USB или 3-х батареек AA должно работать.
Переписал скетч с Ethernet Shield на ESP8266 и добавил в проект схему в формате Eagle и PNG.
Для проверки надежности запустил siege на список урлов, которые поддерживает прошивка. Если за сутки ничего не отвалится и не зависнет, то можно говорить о какой-то надежности. Напомню, что версия на Ethernet Shield зависала случайным образом проработав от нескольких часов до суток и более.
воскресенье, 22 октября 2017 г.
Слежу за погодой в доме: DHT22 + MH-Z19
С наступлением холодов условия в помещении меняются. В качестве показателей "погоды" в доме я решил использовать температуру, относительную влажность и содержание углекислого газа. За показания температуры и влажности отвечает датчик AM2302 (DHT22), а за показания углекислоты - MH-Z19. При покупке на AliExpress оба сенсора обойдутся примерно 22$ - львиную долю составляет стоимость датчика MH-Z19. Химические датчики вроде MG811 я не рассматривал т.к. они довольно быстро деградируют и имеют невысокую точность.
Схема подключения и вид самой платы
К плате подключены два источника питания: USB порт, который питает саму Arduino и Ethernet shield, и AC-DC блок питания, подключенный через модуль питания макетной платы. Последний требуется из-за значительной просадки напряжения при питании MH-Z19 от внутреннего стабилизатора Arduino.
Изначально планировал использовать ESP8266 ESP-12S в качестве контроллера, но из-за проблем с покупкой пока собрал временный вариант на базе Arduino + Ethernet Shield. Показания сенсоров собираются в Munin а доступность платы по сети контролирует Nagios.
На графике хорошо заметны моменты, когда окно в комнате открывалось для проветривания. За время измерений уровень CO2 не превысил 1262 ppm (parts per million). Хотя это и не слишком много, но достаточно чтобы чувствовать себя уставшим. С одной стороны слеклопакеты дают отличную тепло- и звукоизоляцию, но расплата за это - фактически полное отсутствие вентиляции помещения.
Прошивка получилась незамысловатая, но вот ее надежность оставляет желать лучшего. Может проработать больше несколько суток без сбоев, а может зависнуть несколько раз за час. Сначала я грешил на нехватку оперативной памяти, т.к. после добавления всего функционала компилятор стал жаловаться ее нехватку.
Оказалось, что при запуске прошивки все строки копирутся в оперативную память и поэтому ее не хватает. Но если обернуть строку в макрос F(), то такая строка читается из флеш памяти с использованием функций доступа без копирования в оперативную. Использование памяти значительно снизилось
Но проблему зависаний это не решило. Подключил библиотеку MemoryFree - до момента зависания показывает больше килобайта свободной памяти. Сейчас хочу загрузить самый минимальный скетч, который не будет опрашивать сенсоры, а только отдавать OK на health check.
Если плата зависнет, то скорее всего либо проблема в самом Ethernet shield либо в библиотеке Ethernet. В последнем случае можно попробовать проверить стабильность работы заменив общение по сети на работу через Serial.
Схема подключения и вид самой платы
К плате подключены два источника питания: USB порт, который питает саму Arduino и Ethernet shield, и AC-DC блок питания, подключенный через модуль питания макетной платы. Последний требуется из-за значительной просадки напряжения при питании MH-Z19 от внутреннего стабилизатора Arduino.
Изначально планировал использовать ESP8266 ESP-12S в качестве контроллера, но из-за проблем с покупкой пока собрал временный вариант на базе Arduino + Ethernet Shield. Показания сенсоров собираются в Munin а доступность платы по сети контролирует Nagios.
На графике хорошо заметны моменты, когда окно в комнате открывалось для проветривания. За время измерений уровень CO2 не превысил 1262 ppm (parts per million). Хотя это и не слишком много, но достаточно чтобы чувствовать себя уставшим. С одной стороны слеклопакеты дают отличную тепло- и звукоизоляцию, но расплата за это - фактически полное отсутствие вентиляции помещения.
Прошивка получилась незамысловатая, но вот ее надежность оставляет желать лучшего. Может проработать больше несколько суток без сбоев, а может зависнуть несколько раз за час. Сначала я грешил на нехватку оперативной памяти, т.к. после добавления всего функционала компилятор стал жаловаться ее нехватку.
Оказалось, что при запуске прошивки все строки копирутся в оперативную память и поэтому ее не хватает. Но если обернуть строку в макрос F(), то такая строка читается из флеш памяти с использованием функций доступа без копирования в оперативную. Использование памяти значительно снизилось
Но проблему зависаний это не решило. Подключил библиотеку MemoryFree - до момента зависания показывает больше килобайта свободной памяти. Сейчас хочу загрузить самый минимальный скетч, который не будет опрашивать сенсоры, а только отдавать OK на health check.
Если плата зависнет, то скорее всего либо проблема в самом Ethernet shield либо в библиотеке Ethernet. В последнем случае можно попробовать проверить стабильность работы заменив общение по сети на работу через Serial.
вторник, 17 октября 2017 г.
SDR приемник на базе RTL2838U
Приобрел DVB-T приемник на базе чипа RTL2838U, который собираюсь использовать как SDR приемник.
Чтобы ядро Linux не пыталось использовать его как dvb устройство, нужно запретить загрузку модуля dvb_usb_rtl28xxu
После этого нужно подключить приемник или переподключить его.
В системе устройство опозналось так:
На первое время установил GNU Radio и Gqrx
Так выглядит FM станция при приеме на самодельную антенну четвертьволновой диполь из двух телескопических колен (каждое 19 см - 110 см) и одежной вешалки.
Регулируя длину колен такую антенну можно настраивать на оптимальный прием нужной частоты. Для приема FM частот нужно выдвинуть оба плеча антенны на 80 см - это будет соответствовать середине частоты FM диапазона.
В моем варианте длина телескопических колен регулируется от 19 см до 110 см, что соответствует частотам от 394MHz до 68MHz соответственно (чем больше выдвинуты колена, тем ниже частота оптимального приема).
Чтобы ядро Linux не пыталось использовать его как dvb устройство, нужно запретить загрузку модуля dvb_usb_rtl28xxu
$ echo 'blacklist dvb_usb_rtl28xxu' | sudo tee /etc/modprobe.d/rtl2838u-sdr.conf $ sudo modprobe -r dvb_usb_rtl28xxu $ sudo udevadm control --reload-rules
После этого нужно подключить приемник или переподключить его.
В системе устройство опозналось так:
$ lsusb -d 0bda:2838 -v Bus 001 Device 030: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x0bda Realtek Semiconductor Corp. idProduct 0x2838 RTL2838 DVB-T bcdDevice 1.00 iManufacturer 1 Realtek iProduct 2 RTL2838UHIDIR iSerial 3 00000001 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 34 bNumInterfaces 2 bConfigurationValue 1 iConfiguration 4 USB2.0-Bulk&Iso bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 5 Bulk-In, Interface Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 5 Bulk-In, Interface Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 bNumConfigurations 2 Device Status: 0x0000 (Bus Powered)
На первое время установил GNU Radio и Gqrx
sudo apt-get update sudo apt-get install -t jessie-backports rtl-sdr gqrx-sdr gnuradio gr-osmosdr
Так выглядит FM станция при приеме на самодельную антенну четвертьволновой диполь из двух телескопических колен (каждое 19 см - 110 см) и одежной вешалки.
Регулируя длину колен такую антенну можно настраивать на оптимальный прием нужной частоты. Для приема FM частот нужно выдвинуть оба плеча антенны на 80 см - это будет соответствовать середине частоты FM диапазона.
В моем варианте длина телескопических колен регулируется от 19 см до 110 см, что соответствует частотам от 394MHz до 68MHz соответственно (чем больше выдвинуты колена, тем ниже частота оптимального приема).
воскресенье, 15 октября 2017 г.
Не везет с покупкой ESP8266 ESP-12S
С весны пытаюсь заказать два модуля ESP8266 в варианте ESP-12S.
ESP-12S - последний вариант эволюции модулей ESP-12E и ESP-12F. От двух последних отличается отсутствием падов для SPI flash на торце и наличием 4MB flash памяти (по непроверенным слухам).
В мае заказал два модуля на eBay у продавца kingelectronics15. Высокий рейтинг продавца и много продаж внушали доверие. В августе начал пинать продавца на предмет "а где моя посылка" - в итоге возврат средств без каких либо дополнительных вопросов.
Ну бывает, подумал я, и заказал эти модули у продавца caelectronics8. Аналогично высокий рейтинг и много продаж. На этой неделе я обратился к продавцу с тем же вопросом - где моя посылка? В итоге возрат средств.
Появилась мысль, что на почте завелся электронщик, которому приглянулись мои модули. Но эта мысль развеялась, когда я заглянул в транзакции Paypal - оба продавца имеют одинаковый email! В принципе если бы я был более внимателен к мелочам, то в самом начале можно было заметить одинаковый текст в оповещении о заказе. Как там говорят - в одну воронку снаряд дважды не попадает?
В этот раз испытываю удачу на Aliexpress. Теперь заказал пересылку с треком. Надеюсь я не настолько "везуч", чтобы в третий раз наткнуться на этого продавца.
Update 2017-10-24: Сегодня забрал на почте посылку от caelectronics8. Пересылка составила больше 60 дней, но подозрения в нечестности продавца развеялись. Возможно первая посылка от kingelectronics15 действительно потерялась на почте.
ESP-12S - последний вариант эволюции модулей ESP-12E и ESP-12F. От двух последних отличается отсутствием падов для SPI flash на торце и наличием 4MB flash памяти (по непроверенным слухам).
В мае заказал два модуля на eBay у продавца kingelectronics15. Высокий рейтинг продавца и много продаж внушали доверие. В августе начал пинать продавца на предмет "а где моя посылка" - в итоге возврат средств без каких либо дополнительных вопросов.
Ну бывает, подумал я, и заказал эти модули у продавца caelectronics8. Аналогично высокий рейтинг и много продаж. На этой неделе я обратился к продавцу с тем же вопросом - где моя посылка? В итоге возрат средств.
В этот раз испытываю удачу на Aliexpress. Теперь заказал пересылку с треком. Надеюсь я не настолько "везуч", чтобы в третий раз наткнуться на этого продавца.
Update 2017-10-24: Сегодня забрал на почте посылку от caelectronics8. Пересылка составила больше 60 дней, но подозрения в нечестности продавца развеялись. Возможно первая посылка от kingelectronics15 действительно потерялась на почте.
воскресенье, 8 октября 2017 г.
Dell Latitude e6430 включается со второго раза
На прошлой неделе заметил, что ноутбук жены (Dell Latitude e6430) включается со второго раза. После нажатия кнопки питания на порт-репликаторе на мониторе появляется логотип Dell, висит секунд 15, а затем ноутбук отключается. Если включить еще раз, то логотип пропадает быстро и начинается загрузка системы.
Попробовал узнать когда это появилось - говорит, что давно и поскольку ноутбук в итоге включается и работает без проблем, то проблемы как бы и нет. Но я так не играю - полез в BIOS чтобы глянуть какие события записывает в момент отключения питания.
Собственно наибольший интерес представляет событие "Power Off - ASF2 force off". Поиск в интернете привел на форумы Dell, где пишут что это очень общая ошибка, которая может значить любые проблемы. Но один из советов - проверить защелкнуты ли замки аккумулятора.
Достал ноутбук из дока и оказалось, что один из замков батареи открыт. Достал и снова установил батарею чтобы оба замка штатно закрылись.
За несколько дней проблема больше не повторилась - посмотрю как будет дальше.
Попробовал узнать когда это появилось - говорит, что давно и поскольку ноутбук в итоге включается и работает без проблем, то проблемы как бы и нет. Но я так не играю - полез в BIOS чтобы глянуть какие события записывает в момент отключения питания.
Собственно наибольший интерес представляет событие "Power Off - ASF2 force off". Поиск в интернете привел на форумы Dell, где пишут что это очень общая ошибка, которая может значить любые проблемы. Но один из советов - проверить защелкнуты ли замки аккумулятора.
Достал ноутбук из дока и оказалось, что один из замков батареи открыт. Достал и снова установил батарею чтобы оба замка штатно закрылись.
За несколько дней проблема больше не повторилась - посмотрю как будет дальше.
четверг, 13 июля 2017 г.
Обновление Xiaomi Mi4c до LineageOS 14.1
Решил поделиться впечатлениями от обновления своего Xiaomi Mi4c с CyanogenMod 13.1 до LineageOS 14.1. Основная причина обновления - попытка решить проблему с внезапным отключением телефона при заряде батареи 20-30%.
Для обновления использовал вариант прошивки LineageOS от Team Superluminal, firmware от miui 8.2.3.0и заодно обновил TWRP до 3.1.1 (пришлось откатить TWRP на 3.0.2-0, т.к. первый же OTA update привел к boot loop) . Уже прошло две недели с момента обновления и можно подвести итог:
Второй момент - если смотреть ролики на Youtube и выбран английский язык в настройках интерфейса, то почти нет рекламы. Ее становится сильно больше, если сменить язык интерфейса на русский.
Для обновления использовал вариант прошивки LineageOS от Team Superluminal, firmware от miui 8.2.3.0
- Решилась главная проблема с отключением телефона при заряде батареи ниже 30%. Как и положено на 15% я получаю всплывающее уведомление, которое повторяется на 5% и потом телефон разряжается до нуля и выключается.
- Работает активация/деактивация второй симки. В CyanogenMod 13.1 не было возможности деактивировать вторую симку и она постоянно оставалась активной. В качестве второй симки у меня установлена туристическая симка от GoodLine и не хочется "случайно" звонить через нее.
- Я получил последнюю стабильную версию Android 7.1.2 (security patch level: June 5, 2017).
- Теперь при звонке телефон автоматически включает режим "Do not disturb" и новые смски или уведомления от aNag более не жужжат в ухо во время разговора.
Второй момент - если смотреть ролики на Youtube и выбран английский язык в настройках интерфейса, то почти нет рекламы. Ее становится сильно больше, если сменить язык интерфейса на русский.
вторник, 11 июля 2017 г.
Прошляпил обновление signing key для моего репозитария
В пятницу пришло письмо от человека, который указал на истекший срок действия ключа, которым подписывается мой репозитарий.
В APT ошибка выглядит так:
Я уже обновил ключ, но для исправления требуется несколько ручных действий:
Кроме этого можно установить пакет tataranovich-keyring отсюда. В этом случае больше шансов, что ситуация не повторится.
В процессе обновления пакета заметил, что теперь ключ нужно класть в /etc/apt/trusted.gpg.d, а не добавлять через apt-key в postinst.
В APT ошибка выглядит так:
Сущ:10 http://www.tataranovich.com/debian jessie Release Ошк:13 http://www.tataranovich.com/debian jessie Release.gpg Следующие подписи неверные: EXPKEYSIG 836CC41976FB442E Tataranovich.com APT RepositoryЧтение списков пакетов… Готово W: Произошла ошибка при проверке подписи. Репозиторий не обновлён и будут использованы предыдущие индексные файлы. Ошибка GPG: http://www.tataranovich.com/debian jessie Release: Следующие подписи неверные: EXPKEYSIG 836CC41976FB442E Tataranovich.com APT Repository W: Не удалось получить http://www.tataranovich.com/debian/dists/jessie/Release.gpg Следующие подписи неверные: EXPKEYSIG 836CC41976FB442E Tataranovich.com APT Repository
Я уже обновил ключ, но для исправления требуется несколько ручных действий:
sudo apt-key adv --keyserver pool.sks-keyservers.net --recv-keys 0x836CC41976FB442E sudo apt-get update
Кроме этого можно установить пакет tataranovich-keyring отсюда. В этом случае больше шансов, что ситуация не повторится.
В процессе обновления пакета заметил, что теперь ключ нужно класть в /etc/apt/trusted.gpg.d, а не добавлять через apt-key в postinst.
среда, 28 июня 2017 г.
Перестал подключаться PPTP через NAT
Имеется домашний сервер, который маршрутизатор домашней сети и еще много чего, работающий на Debian Jessie. После обновления ядра со штатного 3.16.43-2+deb8u1 до 4.9.30-2~bpo8+1 из backports перестало работать подключение к корпоративной сети через PPTP. Если перезагрузить сервер на старое ядро, то PPTP работает.
Нужные модули загружены:
Помучился немного и спросил в рассылке debian-russian. Добрые люди подсказали два способа решить проблему:
Добавить дополнительное правило в netfilter:
или включить conntrack helper:
Больше информации по теме можно почерпнуть тут.
Нужные модули загружены:
$ grep pptp /etc/modules nf_nat_pptp nf_conntrack_pptp $ lsmod | awk '/pptp/ {print $1}' nf_nat_pptp nf_nat_proto_gre nf_conntrack_pptp nf_conntrack_proto_gre nf_nat nf_conntrack
Помучился немного и спросил в рассылке debian-russian. Добрые люди подсказали два способа решить проблему:
Добавить дополнительное правило в netfilter:
$ sudo iptables -t raw -A PREROUTING -p tcp -m tcp --dport 1723 -j CT --helper pptp
или включить conntrack helper:
$ sudo sysctl -w net.netfilter.nf_conntrack_helper=1
Больше информации по теме можно почерпнуть тут.
пятница, 16 июня 2017 г.
Xiaomi Mi4c внезапно отключается при заряде батареи 20-30%
Не могу вспомнить когда это случилось первый раз, но похоже мой Xiaomi Mi4c взял привычку отключаться при остаточном заряде 20-30%. В произвольный момент, когда батарея показывает ниже 40% телефон вдруг решает что заряд около нуля и штатно выключается.
На графике батареи видно что с примерно 25% батарея мгновенно "разрядилась" до нуля, а после повторного включения телефона отработала еще несколько часов. Причем повторилась старая проблема с продолжающимся разрядом батареи при подключенном зарядном. Калибровка батареи не помогла - я пробовал полностью разрядить батарею, потом зарядить до 100%, калибровать, разрядить до нуля и снова зарядить до 100%.
В интернете встречаются упоминания, что такое поведение не редкость даже у новых телефонов: произвольное отключение телефона происходит при заряде батареи 20-60%. Похоже это связано с проблемами в прошивке (сейчас у меня установлен CyanogenMod 13.1 от Team Superluminal), т.к. у меня эту проблема появилась относительно недавно и скорее всего связана с последним обновлением прошивки в начале этого года.
Зайдя на форум team superluminal узнал, что теперь они предлагают LineageOS 14.1 для Mi4c - нужно будет попробовать эту прошивку при случае.
Обновлено 5/09/2017: Проблема с внезапным отключением решилась обновлением прошивки до LineageOS 14.1.
На графике батареи видно что с примерно 25% батарея мгновенно "разрядилась" до нуля, а после повторного включения телефона отработала еще несколько часов. Причем повторилась старая проблема с продолжающимся разрядом батареи при подключенном зарядном. Калибровка батареи не помогла - я пробовал полностью разрядить батарею, потом зарядить до 100%, калибровать, разрядить до нуля и снова зарядить до 100%.
В интернете встречаются упоминания, что такое поведение не редкость даже у новых телефонов: произвольное отключение телефона происходит при заряде батареи 20-60%. Похоже это связано с проблемами в прошивке (сейчас у меня установлен CyanogenMod 13.1 от Team Superluminal), т.к. у меня эту проблема появилась относительно недавно и скорее всего связана с последним обновлением прошивки в начале этого года.
Зайдя на форум team superluminal узнал, что теперь они предлагают LineageOS 14.1 для Mi4c - нужно будет попробовать эту прошивку при случае.
Обновлено 5/09/2017: Проблема с внезапным отключением решилась обновлением прошивки до LineageOS 14.1.
четверг, 1 июня 2017 г.
Разрядился телефон будучи подключенный к зарядному устройству
Не первый раз замечаю что мой Xiaomi Mi4c, подключенный перед сном к зарядному устройству (остаточный заряд 20-30%), к утру разряжается почти до нуля или совсем отключается.
Сегодня утром аккумулятор показывал 2% заряд и я сделал скриншот
Перед подключением зарядного было больше 20% заряда, но после отключения экрана телефон не уснул. Зарядное устройство и кабель - родные.
Похоже из-за какой-то проблемы в прошике телефон клинит и он начинает расходовать больше, чем дает зарядное. Либо в добавок из-за нагрева ограничивается заряд и поэтому его не хватает, чтобы скомпенсировать повышенный расход энергии.
Сегодня утром аккумулятор показывал 2% заряд и я сделал скриншот
Перед подключением зарядного было больше 20% заряда, но после отключения экрана телефон не уснул. Зарядное устройство и кабель - родные.
Похоже из-за какой-то проблемы в прошике телефон клинит и он начинает расходовать больше, чем дает зарядное. Либо в добавок из-за нагрева ограничивается заряд и поэтому его не хватает, чтобы скомпенсировать повышенный расход энергии.
вторник, 30 мая 2017 г.
Спустя год заметил что отвалился IPv6 на сервере
В процессе прикручивания сертификата Let's Encrypt к своему сайту обнаружил что он более недоступен по IPv6 извне. Причем судя по статистике траффика в панели управления сервером это произошло еще в июне 2016. Сервер имеет IPv4/IPv6 стек и последний был настроен по принципу "пусть будет". А сейчас при валидации домена Let's Encrypt не может соединиться на IPv6 адрес сайта и проверка не проходит.
Доступность сервера по IPv4 проверяется в nagios из дома, а вот проверку доступности IPv6 пришлось добавить в виде костыля (нет у меня другого сервера с IPv6):
Похоже что-то изменилось в маршрутизации у хостера, т.к. ipv6 адрес шлюза пингуется, а вот дальше него - тишина.
Посмотрю что завтра ответит тех. поддержка Hetzner.
UPDATE 31/05/2017
Ответ из техподдержки:
Доступность сервера по IPv4 проверяется в nagios из дома, а вот проверку доступности IPv6 пришлось добавить в виде костыля (нет у меня другого сервера с IPv6):
command['check_ipv6']=/usr/lib/nagios/plugins/check_http -6 -H google.com
Похоже что-то изменилось в маршрутизации у хостера, т.к. ipv6 адрес шлюза пингуется, а вот дальше него - тишина.
$ ip -6 a 1: lo: <loopback> mtu 16436 inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <broadcast> mtu 1500 qlen 1000 inet6 2a01:4f8:d13:2742::2/64 scope global valid_lft forever preferred_lft forever inet6 fe80::21c:14ff:fe01:1dba/64 scope link valid_lft forever preferred_lft forever $ ip -6 r 2a01:4f8:d13:2742::/64 dev eth0 proto kernel metric 256 fe80::/64 dev eth0 proto kernel metric 256 default via 2a01:4f8:d13:2742::1 dev eth0 metric 1024 $ ip -6 neigh fe80::3285:a9ff:fea4:1ff7 dev eth0 lladdr 30:85:a9:a4:1f:f7 router STALE 2a01:4f8:d13:2742::1 dev eth0 lladdr 30:85:a9:a4:1f:f7 router STALE $ ping6 -c 5 2a01:4f8:d13:2742::1 PING 2a01:4f8:d13:2742::1(2a01:4f8:d13:2742::1) 56 data bytes 64 bytes from 2a01:4f8:d13:2742::1: icmp_seq=1 ttl=64 time=0.281 ms 64 bytes from 2a01:4f8:d13:2742::1: icmp_seq=2 ttl=64 time=0.284 ms 64 bytes from 2a01:4f8:d13:2742::1: icmp_seq=3 ttl=64 time=0.250 ms 64 bytes from 2a01:4f8:d13:2742::1: icmp_seq=4 ttl=64 time=0.223 ms 64 bytes from 2a01:4f8:d13:2742::1: icmp_seq=5 ttl=64 time=0.148 ms --- 2a01:4f8:d13:2742::1 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 3999ms rtt min/avg/max/mdev = 0.148/0.237/0.284/0.050 ms $ ping6 -c5 ipv6.google.com PING ipv6.google.com(waw02s06-in-x0e.1e100.net) 56 data bytes --- ipv6.google.com ping statistics --- 5 packets transmitted, 0 received, 100% packet loss, time 4033ms
Посмотрю что завтра ответит тех. поддержка Hetzner.
UPDATE 31/05/2017
Ответ из техподдержки:
Thanks for trying a reboot first. We've now rechecked the routing of your IPv6-net and we were able to find an issue, which we fixed directly and your server is now back online using the mentioned IPv6.IPv6 снова работает и мне удалось установить сертификат Let's Encrypt для моего сайта.
Обновление BIOS на Dell Latitude E6430
Этот пост ориентирован на технически грамотную аудиторию. Если вы не обладаете необходимыми навыками - не пытайтесь повторить описанное. Я не несу никакой ответственности за ваши ошибки или возможный ущерб, возникший в следствии попытки повторить описанное.
После публикации информации об уязвимости в Intel AMT CVE-2017-5689 (INTEL-SA-00075) отправился на сайт Dell проверить апдейты. На тот момент обновление прошивки для моего Latitude E6430 еще не было выпущено, но в планах значилось начало июня.
На днях проверил обновления еще раз - уже доступна прошивка A21 с исправлением уязвимости. Последний раз обновлял BIOS в ноутбуке сразу после покупки и потому там установлена старая версия A16.
Для обновления скачиваю все доступные прошивки от A16 до A21, которые предназначены для Latitude E6430 (A16, A17, A18, A20, A21) и создаю загрузочный образ FreeDOS, содержащий в себе скачанные прошивки (загрузочный образ можно скачать тут).
Убедидесь что ваша флешка видна в системе как /dev/sdb. В противном случае рискуете затереть системный диск!
Несколько команд для скачивания образа и заливки на флешку:
$ wget http://www.tataranovich.com/public/dell/{e6430_bios_update.img.gz,MD5SUMS} $ md5sum -c MD5SUMS $ gunzip e6430_bios_update.img.gz $ sudo dd if=e6430_bios_update.img of=/dev/sdb
Не продолжайте обновление, если не совпадает контрольная сумма для образа диска!
Далее можно продолжать обновление по аналогии.
Посколько в installation guide для прошивки нет ничего про запрет сквозного обновления, то для ноутбука жены (у нее тоже Latitude E6430) выбрал вариант обновления с версии A16 до A21. Весь процесс обновления занял минут 5 и завершился без ошибок.
А вот с моим ноутбуком такой финт не прошел. На этапе обновления "Sending Intel(R) Management Engine Firmware Update" произошла ошибка "ME FW Update Failed: Internal error: FWU_Buffer". После этого обновление продолжилось и завершилось без ошибок.
Я пробовал гуглить ошибку, но нашел только что ее исправили в обновлении A17. Накатываю прошивку версии A17 - обновилось без проблем. Потом настает очередь A18, A20 и снова A21. В этот раз обновление "Management Engine Firmware" прошло без ошибок.
До обновления версия Intel Management Engine Firmware была 8.1.40.1416, а после установки прошивки A21 стала 8.1.71.3608.
Кстати еще нашел утилиту mei-amt-check для проверки версии AMT:
$ git clone https://github.com/mjg59/mei-amt-check.git $ cd mei-amt-check $ make $ sudo ./mei-amt-check Intel AMT is present AMT is unprovisioned
Этот пост ориентирован на технически грамотную аудиторию. Если вы не обладаете необходимыми навыками - не пытайтесь повторить описанное. Я не несу никакой ответственности за ваши ошибки или возможный ущерб, возникший в следствии попытки повторить описанное.
понедельник, 22 мая 2017 г.
Произвольная скорость порта с Prolific PL2303 в Linux
Тут описаны мои попытки разобраться в настройку нестандартной скорости порта 74880 бит/с используя usb-to-serial конвертор prolific pl2303. Похоже в linux модуль ядра pl2303 реализует только стандартные скорости для передачи данных: 9600, 14400, 28800 и т.д. Но скорость 74880 не входит в этот список и драйвер хотя и принимает настройку через anybaud, но ничего при этом не изменяется.
Я нашел в сети два патча для pl2303, которые решают проблему задания произвольной скорости порта в linux. Первый патч меняет формулу расчета делителя частоты, а второй патч использует эту формулу для любой скорости, не входящей в список поддерживаемых драйвером. Соответственно для стандартных скоростей ничего поменяться не должно.
Чтобы не возиться с установкой модуля в linux я подготовил репозитарий с версией для dkms
После выполнения этой команды dkms должен собрать и установить обновленную версию модуля pl2303 и загрузить его в систему. Теперь можно задать произвольную скорость (например через anybaud, которая есть в том же репозитарии):
Я нашел в сети два патча для pl2303, которые решают проблему задания произвольной скорости порта в linux. Первый патч меняет формулу расчета делителя частоты, а второй патч использует эту формулу для любой скорости, не входящей в список поддерживаемых драйвером. Соответственно для стандартных скоростей ничего поменяться не должно.
Чтобы не возиться с установкой модуля в linux я подготовил репозитарий с версией для dkms
sudo apt-get update sudo apt-get install linux-headers-$(uname -r) dkms wget -O pl2303-dkms.tar.gz https://github.com/tataranovich/pl2303/archive/master.tar.gz tar -xzf pl2303-dkms.tar.gz cd pl2303-master sudo make install
После выполнения этой команды dkms должен собрать и установить обновленную версию модуля pl2303 и загрузить его в систему. Теперь можно задать произвольную скорость (например через anybaud, которая есть в том же репозитарии):
cd pl2303-master ./anybaud /dev/ttyUSB0 74880 Changed successfully.
воскресенье, 21 мая 2017 г.
Скорость порта 74880 бит/с в Prolific PL2303
Собираю датчик качества воздуха (температура, относительная влажность и содержание углекислоты) на базе esp8266, который будет интегрирован с системой мониторинга. Сейчас у меня esp8266 есть только в виде модуля ESP-01 (выводы модуля vcc, gnd, ch_en, reset, gpio0, gpio2, rx, tx), но уже заказал модуль в варианте ESP-12S.
На ESP-01 выведены только два gpio, но и те доступны с ограничениями. Оба этих вывода участвуют в выборе режима запуска модуля
Соответственно gpio0/gpio2 желательно не использовать на модуле ESP-01, но поскольку особого выбора не было, то для подключения датчика температуры и влажности DHT22 (AM2302) я использовал gpio2. Чтобы подключить датчик углекислоты mh-z19 мне нужно использовать uart (выводы rx/tx) и после этого для программирования модуля его придется извлекать. Перед подключением датчика проверяю что выдается в uart помимо отладочных сообщений прошивки.
Подключаю конвертер на базе Prolific PL2303, который я использую для связи с компьютеров и настраиваю порт /dev/ttyUSB0 на скорость 115200 бод:
После этого жму reset и вижу "мусор" перед первой строчкой, которую выдает прошивка.
Скорее всего это лог встроенного загрузчика, но который передается на другой скорости (не 115200). Попробовал несколько вариантов 9600, 38400, 57600, но разборчивого текста так и не получилось.
После гугления я выяснил что лог загрузчика передается на нестандартной скорости 74880 бод и потому я вижу "мусор" в терминале. Пробую переключить порт на 74880:
Облом, не дает задать произвольную скорость, но при этом в linux уже давно есть возможность задавать произвольную скорость для последовательных портов. Нашел простую утилитку anybaud.c, которая позволяет выставить произвольную скорость. Компилирую ее и пробую выставить настройку:
Хотя команда и прошла без ошибок, но лучше не стало
Сообщения прошивки превратились в мусор, но сообщения загрузчика текстом не стали.
Загрузил Windows 7 в VirtualBox, пробросил pl2303 в виртуальную машину и попробовал подключиться к порту через Putty
Сначала подумал, что это проблемы из-за эмуляции USB в VirtualBox, но переключение скорости порта в Putty на 115200 опровергает эту теорию
Гугление приносит результат - для поддержки скорости 74880 бод нужно добавить настройку в реестр:
После импорта в реестр перезагрузил виртуальную машину и снова попробовал подключиться к порту к Putty. На этот раз все сработало и появились сообшения загрузчика
Забегая вперед скажу, что я уже нашел способ как пропатчить pl2303 в linux, но напишу об этом в следующий раз.
Обновлено 22/05/2017: описал способ пропатчить модуль ядра pl2303 в linux для поддержки произвольной скорости передачи данных.
ESP8266 ESP-01 |
ESP8266 ESP-12S |
Mode | gpio0 | gpio2 | gpio15 |
---|---|---|---|
UART Download Mode (Programming) | 0 | 1 | 0 |
Flash Startup (Normal) | 1 | 1 | 0 |
SD-Card Boot | 0 | 0 | 1 |
Соответственно gpio0/gpio2 желательно не использовать на модуле ESP-01, но поскольку особого выбора не было, то для подключения датчика температуры и влажности DHT22 (AM2302) я использовал gpio2. Чтобы подключить датчик углекислоты mh-z19 мне нужно использовать uart (выводы rx/tx) и после этого для программирования модуля его придется извлекать. Перед подключением датчика проверяю что выдается в uart помимо отладочных сообщений прошивки.
Подключаю конвертер на базе Prolific PL2303, который я использую для связи с компьютеров и настраиваю порт /dev/ttyUSB0 на скорость 115200 бод:
$ stty -F /dev/ttyUSB0 115200 raw $ cat /dev/ttyUSB0
После этого жму reset и вижу "мусор" перед первой строчкой, которую выдает прошивка.
ESP8266 UART 115200 bps |
Скорее всего это лог встроенного загрузчика, но который передается на другой скорости (не 115200). Попробовал несколько вариантов 9600, 38400, 57600, но разборчивого текста так и не получилось.
После гугления я выяснил что лог загрузчика передается на нестандартной скорости 74880 бод и потому я вижу "мусор" в терминале. Пробую переключить порт на 74880:
$ stty -F /dev/ttyUSB0 74880 stty: invalid argument ‘74880’ Try 'stty --help' for more information.
Облом, не дает задать произвольную скорость, но при этом в linux уже давно есть возможность задавать произвольную скорость для последовательных портов. Нашел простую утилитку anybaud.c, которая позволяет выставить произвольную скорость. Компилирую ее и пробую выставить настройку:
$ wget -O anybaud.c https://gist.githubusercontent.com/peterhurley/fbace59b55d87306a5b8/raw/5017e43f9fde34e9ac37ab2c3fd35b5ca3c3e73f/anybaud.c $ gcc -static -o anybaud anybaud.c $ ./anybaud /dev/ttyUSB0 74880 /dev/ttyUSB0 speed changed to 74880 baud
Хотя команда и прошла без ошибок, но лучше не стало
ESP8266 UART 74880 bps |
Загрузил Windows 7 в VirtualBox, пробросил pl2303 в виртуальную машину и попробовал подключиться к порту через Putty
ESP8266 UART 74880 bps в Putty |
Сначала подумал, что это проблемы из-за эмуляции USB в VirtualBox, но переключение скорости порта в Putty на 115200 опровергает эту теорию
ESP8266 UART 115200 bps в Putty |
REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Ser2pl] "ExtBaudrate"="74880,2147485264"
После импорта в реестр перезагрузил виртуальную машину и снова попробовал подключиться к порту к Putty. На этот раз все сработало и появились сообшения загрузчика
ESP8266 UART 74880 bps в Putty после патча реестра |
Обновлено 22/05/2017: описал способ пропатчить модуль ядра pl2303 в linux для поддержки произвольной скорости передачи данных.
среда, 17 мая 2017 г.
Изменения в моем репозитории: Ubuntu Zesty
Добавил поддержку Ubuntu Zesty 17.04 в свой репозиторий и удалил Ubuntu Precise по причине окончания поддержки последнего.
Пакеты для midnight commander (stable и nightly) уже добавлены для Ubuntu Zesty.
Сейчас список поддерживаемых дистрибутивов и архитектур выглядит так:
Debian: wheezy (i386, amd64, armel, armhf), jessie (i386, amd64, armel, armhf, arm64), stretch (i386, amd64), sid (i386, amd64)
Ubuntu: trusty (i386, amd64, armhf, arm64), xenial (i386, amd64), yakkety (i386, amd64), zesty (i386, amd64)
С покупкой raspberry pi 3 планирую добавить полноценный хост для сборки пакетов под архитектуры armel, armhf и arm64. Сейчас пакеты под эти архитектуры собираются в qemu и скорость сборки достаточно медленная.
Начал тестировать jenkins-debian-glue и думать над реорганизацией структуры репозитория. В теперешнем виде пакеты для debian и ubuntu находятся в одной иерархии и к примеру добавление raspbian дает конфликт по именам относительно debian.
Пакеты для midnight commander (stable и nightly) уже добавлены для Ubuntu Zesty.
Сейчас список поддерживаемых дистрибутивов и архитектур выглядит так:
Debian: wheezy (i386, amd64, armel, armhf), jessie (i386, amd64, armel, armhf, arm64), stretch (i386, amd64), sid (i386, amd64)
Ubuntu: trusty (i386, amd64, armhf, arm64), xenial (i386, amd64), yakkety (i386, amd64), zesty (i386, amd64)
С покупкой raspberry pi 3 планирую добавить полноценный хост для сборки пакетов под архитектуры armel, armhf и arm64. Сейчас пакеты под эти архитектуры собираются в qemu и скорость сборки достаточно медленная.
Начал тестировать jenkins-debian-glue и думать над реорганизацией структуры репозитория. В теперешнем виде пакеты для debian и ubuntu находятся в одной иерархии и к примеру добавление raspbian дает конфликт по именам относительно debian.
четверг, 2 февраля 2017 г.
Настройка suspend to hibernate в Debian Jessie
Ранее я уже писал про экономию заряда батареи ноутбука при использовании suspend to ram (S3). Такой режим называется suspend to hibernate и заключается в автоматическом переходе из S3 (suspend to ram) в S4 (suspend to disk) если пользователь не продолжит работу в течении заданного периода времени.
Прошлое решение базировалось на pm-utils, но с переходом jessie на systemd это перестало работать (#745848). До недавнего времени я пользовался jessie + sysv init и эта проблема меня не касалась, но последнее время все чаще сталкиваюсь с systemd и решил дать ему шанс на домашней системе. Наибольшей проблемой после перехода на systemd стал отвалившийся suspend-to-hibernate.
В wiki archlinux есть вариант для systemd. Пришлось немного доработать их вариант, чтобы он начал работать в debian jessie.
Этот сервис нужно сохранить в файле /etc/systemd/system/suspend-to-hibernate.service и добавить в suspend.target зависимость на suspend-to-hibernate.service. В противном случае suspend.target не будет дожидаться выполнения suspend-to-hibernate.service.
В будущем планирую интегрировать поддержку systemd в мой laptop-utils и собрать для него пакет.
Прошлое решение базировалось на pm-utils, но с переходом jessie на systemd это перестало работать (#745848). До недавнего времени я пользовался jessie + sysv init и эта проблема меня не касалась, но последнее время все чаще сталкиваюсь с systemd и решил дать ему шанс на домашней системе. Наибольшей проблемой после перехода на systemd стал отвалившийся suspend-to-hibernate.
В wiki archlinux есть вариант для systemd. Пришлось немного доработать их вариант, чтобы он начал работать в debian jessie.
[Unit] Description=Delayed hibernation trigger Documentation=https://wiki.archlinux.org/index.php/Power_management Before=suspend.target Conflicts=hibernate.target hybrid-suspend.target StopWhenUnneeded=true [Service] Type=oneshot RemainAfterExit=yes Environment="WAKEALARM=/sys/class/rtc/rtc0/wakealarm" Environment="SLEEPLENGTH=+2hours" ExecStart=-/bin/sh -c 'echo -n "alarm set for "; date +%%s -d$SLEEPLENGTH | tee $WAKEALARM' ExecStop=-/bin/sh -c '\ alarm=$(cat $WAKEALARM); \ now=$(date +%%s); \ if [ -z "$alarm" ] || [ "$now" -ge "$alarm" ]; then \ echo "hibernate triggered"; \ systemctl hibernate; \ else \ echo "normal wakeup"; \ fi; \ echo 0 > $WAKEALARM; \ ' [Install] WantedBy=sleep.target
Этот сервис нужно сохранить в файле /etc/systemd/system/suspend-to-hibernate.service и добавить в suspend.target зависимость на suspend-to-hibernate.service. В противном случае suspend.target не будет дожидаться выполнения suspend-to-hibernate.service.
sudo cp /lib/systemd/system/suspend.target /etc/systemd/system/suspend.target echo Requires=suspend-to-hibernate.service | sudo tee -a /etc/systemd/system/suspend.target sudo systemctl enable suspend-to-hibernate.service sudo systemctl daemon-reload
В будущем планирую интегрировать поддержку systemd в мой laptop-utils и собрать для него пакет.
Подписаться на:
Сообщения (Atom)