Дешевый LCD экран 128×64

Удивительное дело — mp3-плеер с экраном на алиэкспрессе можно купить дешевле, чем отдельный экран. Но только купить недостаточно, нужно разобраться с распиновкой. В этом мне помог сайт AlexShu. На всякий случай сохраню у себя картинку и пример кода с его сайта.

// MOSI – Arduino pin 11
// SCLK – Arduino pin 13
// A0 – Arduino pin 9
// RST – Arduino pin 8
// CS – Arduino pin 10
// LED-/+ to GND and 3.3V with 15 Ohm resistor
#include "U8glib.h"
U8GLIB_MINI12864 u8g(10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RESET = 8
void draw(void) {
 u8g.setFont(u8g_font_unifont);
 u8g.drawStr( 0, 22, "Hello World!");
}
void setup(void) {
 u8g.setContrast(190);
}
void loop(void) {
 u8g.firstPage(); 
 do {
 draw();
 } while( u8g.nextPage() );
 delay(50);
}

А вот результат:

Плата для удобной распайки разных шлейфов на алиэкспрессе.

Если хотите получать кэшбэк за покупки в онлайн-магазинах, а заодно поблагодарить меня — зарегистрируйтесь по моей реферальной ссылке на letyshops.ru

NetworkManager: отбираем контроль над интерфесами

Чтобы заставить NetworkManager оставить в покое ваш любимый интерфейс, нужно в файле /etc/NetworkManager/NetworkManager.conf добавить раздел [keyfile] со строкой unmanaged-devices, в которой перечислить мак-адреса освобожденный интерфейсов. Необходимо удостовериться, что плагин keyfile включен в список.

[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=false

[keyfile]
unmanaged-devices=mac:c4:6e:1f:04:54:cc;mac:60:e3:27:02:55:34;mac:fc:75:16:85:93:94

NRF24 и ESP8266

После долгих мучений наконец-то заставил NodeMCU (ESP8266) работать с nRF24L01p. В этом деле мне здорово помог логический анализатор. Сначала я снял обмен данными с ардуины, где есть отлаженная библиотека и всё работает с полпинка. Затем привел свой код в аналогичный вид, но без какого-либо результата. При снифе моего обмена оказалось, что модуль SPI в NodeMCU поднимает Chip Select после каждого байта! Естественно, загрузка адресов и полезных данных в nRF24 нифига не работала. Сильно запутало то, что чтение и запись одиночных регистров при этом происходили правильно — в одной транзакции я отправлял адрес регистра, в следующей — успешно получал содержимое. Чудеса! Решилось ручным управлением Chip Select’ом с отдельного GPIO. Ну и вишенкой на торте стали перепутанные провода CE и CSN на одной из тестовых плат.

Теперь наконец можно сделать перекладыватель из nRF в MQTT и перенести батарейные датчики с ESP8266 на STM8L+nRF24. Предварительный расчет показал, что батарейки CR2032 должно хватить на 5 лет при отправке данных каждую минуту. Правда, это без каких либо датчиков.

Zabbix и Systemd

Наткнулся на интересную проблему — Zabbix proxy или server не запускаются автоматически после перезагрузки, но отлично запускаются вручную. Оказывается, на момент запуска zabbix ещё не доступен mysql и сервис не запускается. Нужно объяснить systemd, что нам нужен работающий mysql. Для этого открываем файл /lib/systemd/system/zabbix-proxy.service (Ubuntu 16.10). В разделе [Unit] находим строку After=network.target и после неё добавляем After=mysql.service

Датчик пульса, операционный усилитель и DSO138

Потихоньку готовлюсь собирать логгер пульса, чтобы записать его изменения во сне. Взял нагрудный датчик с приемником, подключающимся в аудиоразъём смартфона. Приемник выдает импульсы на каждый удар сердца в линию микрофона. С помощью специального приложения можно увидеть пульс, а с помощью простых утилит — просто сигналы на микрофонном входе. Напряжение очень маленькое, необходимо увеличить его, чтобы микроконтроллер увидел сигнал. Для этого взял подвернувшийся MCP6141 и собрал инвертирующую схему. Подобрал резисторы и получил хороший сигнал. Распознать его будет не сложно, а пока нужно разобраться с записью на SD-карту.

DSO138 и Transistor Tester

На прошлых выходных получил долгожданную посылку из Китая — набор для сборки действующей модели осциллографа и тестер компонентов, который при сборке весьма помог. Три часа пайки и отгоняния кошки от компонентов и осциллограф заработал 🙂

Починил гирлянду

Перестала работать гирлянда на балконе. Помогало сжать коробочку с контроллером в кулаке, но стоило её отпустить — гирлянда гасла. К счастью, блок не был заклеен, а держался на сопливых защёлках. Нагуглил схему, ужаснулся, увидев, что конденсатор по питанию впаян задом наперёд. Заменил конденсатор — никакого эффекта. Короткая вспышка при втыкании гирлянду в розетку говорила, что диоды и тиристоры в норме, не хватает лишь управления. Помимо черной кляксы контроллера только один элемент относился к управлению — мегаомный резистор, подающий на контроллер 50 Гц прямо с фазы. Замена резистора помогла, гирлянда ожила!

Источник схемы и советов

Как подслушать NRF24?

Сижу тут, ковыряю NRF24 и думаю, можно ли как-то послушать эфир? Оказалось, что можно, но т.к. частота 2.4 ГГц нужен либо нормальный SDR за 300 баксов, либо баксов за 20 внизконвертер для ТВ-тюнера. Интересно, но я не готов пока потратиться.
http://blog.cyberexplorer.me/2014/01/sniffing-and-decoding-nrf24l01-and.html

Для истории сохраню ссылки:
Конвертер
Декодер

ESP8266: обновление прошивки

Собрать свою прошивку для esp8266 можно на сайте https://nodemcu-build.com/. Для заливки в контроллер мне удобнее использовать инструмент командной строки — esptool.py.

Команда для записи во флэш выглядит так:

esptool.py -p /dev/ttyUSB0 write_flash --flash_mode dio 0x0 ./firmware.bin

Стоит обратить особое внимание на параметр —flash_mode dio, т. к. многие модули не смогут прошиться в режиме qio, который используется по умолчанию. После неудачной прошивки такой модуль будет жаловаться:

rf_cal[0] !=0x05,is 0x74

Я сначала думал, что дело в испорченном разделе конфигурации, но оказалось, что прошивка неправильно пишется. QIO — это quad IO, а DIO — dual IO. Т.е. в первом случае биты данных передаются по четырём линиям, а во втором — только по двум. Получается, что выдаём мы 4 бита за раз, а флэш, не зная об этом, пишет только два. И вместо прошивки получается мусор :-/

avrdude и ft232h

Попалась мне платка UM232H-B. Решил попробовать её в качестве программатора для AVR. В конфиге avrdude есть целых два варианта: UM232H и C232HM, однако, оба они не работают. Перерыв интернет я нашёл старый список рассылки, а в нём — патч. Содержание патча очень простое:

diff -rupN orig/avrdude.conf.in new/avrdude.conf.in
--- orig/avrdude.conf.in	2014-04-06 23:49:05.261214500 +1000
+++ new/avrdude.conf.in	2014-05-12 13:39:58.468858700 +1000
@@ -491,10 +491,10 @@ programmer
   usbproduct = "";
   usbsn      = "";
 #ISP-signals
-  sck    = 1;
-  mosi   = 2;
-  miso   = 3;
-  reset  = 4;
+  sck    = 0;
+  mosi   = 1;
+  miso   = 2;
+  reset  = 3;
 ;
 
 # C232HM module from FTDI and Glyn.com.au.
@@ -518,10 +518,10 @@ programmer
   usbproduct = "";
   usbsn      = "";
 #ISP-signals
-  sck    = 1;
-  mosi   = 2;
-  miso   = 3;
-  reset  = 4;
+  sck    = 0;
+  mosi   = 1;
+  miso   = 2;
+  reset  = 3;
 ;

Т.е. кто-то просто накосячил с нумерацией выводов, а кто-то за два года не смог патч применить (avrdude version 6.1). С правильной нумерацией выводов avrdude заработал. Попробую донести патч до разработчиков.
Оказалось, в версии 6.3 нумерация правильная.

Realtek RTL8710: Убийца ESP8266

Процессор ARM Cortex M3 @ 166 MHz, встроенный мегабайт флэша (как у недавно анонсированного ESP8285) и больше периферии. Выглядит многообещающе, но SDK и даташитов пока нет.

http://www.cnx-software.com/2016/07/28/an-alternative-to-esp8266-realtek-rtl8710-arm-cortex-m3-wifi-iot-modules-sell-for-2-and-up/

Доставка продуктов от Партии Еды

И ещё немного рекламы, пока пишется.

Некоторое время назад меня спрашивали про фоточки еды с рецептами. Кому-то рассказал, кому-то не успел, так что напишу. Это были блюда от Партии Еды — сервиса доставки продуктов. В воскресенье или понедельник вам привозят коробку продуктов, которые вы закидываете в холодильник. Продукты распределены по пакетам — один пакет на один ужин. Вечером достаёте пакет и готовите блюдо из меню. Рецепты подобраны так, чтобы в первую очередь использовать продукты с малым сроком хранения. Время готовки обычно 30-40 минут. Продукты свежие, порции большие, мы не могли всё съесть.
Зачем вообще нужна доставка продуктов, если всё можно купить самому? Решаются две проблемы — не нужно придумывать меню и не нужно тратить время на поход в магазин. Не самые сложные дела, но иногда хочется избавиться от рутины и устроить себе праздник. Думаю, мы будем изредка делать заказы именно для разнообразия меню. Сервис не единственный, но многие не доставляют за КАД, а я именно там.

Если кого смущает цена — можно скинуть 500 р промо-кодом A4HS0 или купить купон на групоне, как сделал я.

Купоны: https://www.groupon.ru/deals/piter-partiaedy
Группа: https://vk.com/partiyaedi
Сайт: http://partiyaedi.ru/

Партия Еды 2

Партия Еды 2

Кэшбэк letyshops.ru

Минутка рекламы 🙂
Кэшбэк от letyshops действительно работает. Первый заказ на али по партнёрской ссылке я сделал в начале мая, а к концу июня накопил минимальную сумму для вывода — 500 р. Закинул на телефон, но можно и на карту или яндекс. Можно пользоваться 🙂
https://letyshops.ru/soc/sh-1/?r=780406

lety

VirtualBox: Kernel driver not installed (rc=-1908)

С обновлением VirtualBox изменился и путь, по которому находится скрипт, обновляющий необходимый модуль ядра. Диалог с сообщением об ошибке предлагает выполнить команду:

/sbin/rcvboxdrv setup

но он ошибается (по крайней мере, в Ubuntu 15.10). Правильный вариант такой:

sudo /usr/lib/virtualbox/vboxdrv.sh setup

Найти файл можно командой:

locate vboxdrv.sh

Тестирование сетевого оборудования

Слушал вчера подкаст linkmeup, из которого узнал, что помимо Sifos, тестирующего на соответствие стандарту PoE, существует не менее громкий бренд — Ixia. Это продукты для тестирования на соответствие различным сетевым протоколам.

Собираем изображения в GIF

 convert -delay 20 -loop 0 *.jpg out.gif

К сожалению, размер конечного файла оказывается куда больше, чем суммарный размер исходников. Например, 57 картинок jpg размером 3 МБ в результате дали gif на 12 МБ!

Источник: https://scottlinux.com/2011/07/31/create-animated-gif-in-linux-from-command-line/

NodeMCU: не работает adc.read()

Как оказалось, из коробки в NodeMCU ацп настроен на измерение напряжения питания и не может измерять напряжение на ножке TOUT, adc.read(0) возвращает 65535. Для того, чтобы изменить это поведение нужно подправить область конфигурации в флэше. Первыми робкими экспериментами я немного окирпичил тестовую платку и долго пытался вернуть её к жизни 🙂

Конфигурация хранится  в последних 16 килобайтах флэша, так что её точное местоположение зависит от размера флэшки. На моей плате node.flashid() возвращает 1458400, что в шестнадцатеричном виде превращается в 0x1640E0. Из этих цифр трудно сделать далеко идущие выводы, но в итоге оказалось, что флэшка у меня на 4 МБ (32 Мбит). Таким образом область конфигурации начинается с адреса 0x3FC000. Для флэшек 512 КБ (4 Мбит) адрес будет 0x7C000.

Сливаем  8 КБ с помощью esptool.py:

python esptool.py -p COM4 read_flash 0x3FC000 0x2000 init.bin

В любом hex-редакторе находим байт по смещению 107 (десятичное). Скорее всего, он будет равен 0xFF. Заменяем на 0x21 (33, т.е. 3.3 В), сохраняем файл и заливаем обратно:

python esptool.py -p COM4 write_flash 0x3FC000 init.bin

Теперь АЦП измеряет напряжение на входе и радует разнообразными значениями от не нуля до 1024.

Первый обзор на mysku.ru

Сегодня написал свой первый обзор для mysku. Впечатления весьма положительные! Получил много комментариев и вопросов, в основном всё по делу. Приведу самые понравившиеся:

Можно использовать как розетку? Углубившись в измерение зарядника я совсем забыл про основную функцию — розетку. Мимоходом упомянул, что вилки влезают и не выпадают. Этого мало, так что собираюсь подключить чайник, вскипятить пару раз и посмотреть, как розетка это переживёт.

Недостаточная гальваническая изоляция. ksiman справедливо указывает на слабую изоляцию низковольтной цепи от высокого напряжения. Действительно, там всего миллиметр. Опасно.

Горючий материал? chaloc пишет, что материал может поддерживать горение. Учитывая, что корпус сильно греется при зарядке на 2 А, розетка может стать причиной пожара.

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

Windows 7: Internet time — Unable to continue

Захотел убедиться, что Windows синхронизирует часы с серверами точного времени. Нажимаю кнопочку Change settings… И получаю сообщение об ошибке… Внезапно.

Первая же ссылка в гугле по запросу «windows 7 internet time unable to continue» выдала следующее решение: запустить командную строку от администратора и выполнить команду w32tm /register

Помогло! Окно настройки сервера точного времени снова открывается. Однако, при нажатии кнопки «Update now» получаю сообщение об ошибке: «Unable to start Windows Time service». Ох уж эти виндусы… Ладно, идём дальше. Захожу в управление сервисами, запускаю Windows Time service вручную и вижу портянку

windows time error

Очередной гуглёж выдал идею: выполнить команду sc config w32time type= own. Некоторый результат есть — сервис запускается, но ручная синхронизация всё равно выдаёт ошибку. Причем ошибка зависит от того, используется time.microsoft.com или другой сервер. Класс.

Нагуглил предложение перезагрузить комп. Перезагрузил — всё отвалилось к исходному положению: сервис не запущен, настройки недоступны. Идеально. На данный момент имею следующее. При попытке ручной синхронизации с time.microsof.com получаю ошибку «An error occurred getting the status of the last synchronization. Access is denied». При синхронизации с любым другим сервером: «An error occurred while windows was synchronizing with time.nist.gov». Сказочно.

А дальше… было вот что:

C:\Windows\system32>w32tm /unregister
The following error occurred: Access is denied. (0x80070005)

C:\Windows\system32>w32tm /unregister
W32Time successfully unregistered.

И тут я сдался. Если систему можно переубедить повторив команду пару раз — с ней всё очень плохо. Но ещё хуже, когда переубедить не получается, а где искать права доступа — не ясно.

C:\Windows\system32>w32tm /resync
Sending resync command to local computer
The following error occurred: Access is denied. (0x80070005)

C:\Windows\system32>w32tm /resync
Sending resync command to local computer
The following error occurred: Access is denied. (0x80070005)

C:\Windows\system32>w32tm /resync
Sending resync command to local computer
The following error occurred: Access is denied. (0x80070005)

Команды выполнялись от Администратора. Где взять больше прав — не представляю.

Отключаем обновление до Windows 10

Control Panel -> System and Security -> Windows Update, View installed updates

Находим обновление Update for Microsoft Windows (KB3035583) и удаляем его. Перезагружаем компьютер — значка обновления больше нет, но он может появиться снова. Чтобы этого избежать, нужно отключить данное обновление, однако я его в списке доступных не нашёл.