Архив рубрики: Отзывы о девайсах

Обзор смартфона Oukitel K1000

Устал от телефонов, с которыми еле-еле дотягиваешь до ночи, учитывая что еще и днем подзаряжаешь. Психанул. Заказал Oukitel K1000 на aliexpress за 8тыс с копейками.. Основной критерий был — максимально большая батарейка. Нашел — 10000ma/h (заявлено).Остальные характеристики были не важны.

Итак, что имеем на текущий момент после недели эксплуатации:

  • При очень жесткой эксплуатации (т.е. реально, днем почти не выпускается из рук, а вечером ребенок отбирает посмотреть ютубик/поиграть) — батарейки хватает на 3 суток.
  • Очень тяжелый для телефона. Вес порядка 700грамм. Когда долго говоришь — рука устает и не держит у уха.
  • Приложения пока не тормозят, памяти хватает 4+16гиг
  • Фотографии приличные как на фронтальной камере, так и внутренней.

В целом телефоном пока доволен.

HLK-SW16 устройство с 16 реле управления нагрузкой

Куплено на Aliexpress. Устройство предназначено для управления реле по сети. Выглядит вот так:

Q14078-HLK-SW16-16-Канал-Android-Смартфон-CWiFi-Реле-Реле-WiFi-Модуль-FreePostИмеет на борту встроенный WiFi модуль, т.е. можно цепляться как по Ethernet, так и по WiFi. На этом все прелести и кончаются и начинаются минусы:

  • устройство управляется только при использовании p2p сети
  • API и SDK хоть и есть, и описано достаточно подробно, но нет ни исходных кодов, ни скомпилированных библиотек lib2tu под Linux.
  • пока не найдено возможности «отвязвать» от их «облака».  При старте устройство лезет туда и авторизируется автоматически. Если нет авторизации — управлять им не получится.

Техподдержка в скайпе отвечает. Но к сожалению пока ничем особо помочь не может. Выслали всё что могли. Но т.к. таки нет библиотек libt2u под Linux, управлять возможным не представляется. Да и ценность этого «управления» сомнительна, т.к. необходимость авторизации на стороннем сервере мягко говоря настораживает.

Да, для «дома для семьи» оно может и без разницы, но для того чтобы поставить в «продакшен» конечно и речи нет, пока нет способа отвязать устройство от их серверов..

Go2ReachService — вирус

Долго напрягало что новый, купленный в Евросети телефон Fly FS 451 время от времени сам скачивает устанавливает всякие безобидные приложения в основном рекламного характера. Руки не доходили заняться этой проблемой, т.к. знал что это «заводская козявка», ибо сам никакие приложения никогда не ставил и заразиться в принципе не мог.. Наконец руки дошли разобраться с проблемой. Так и есть — системное приложение Go2ReachService  поставляемое с «родной» прошивкой телефона. После отключения проблема ушла.

Русификация utft для arduino

Итак, пришел наконец дисплейчик на микросхеме HX8357B.  Подключил — работает. Демки показывает которые идут к библиотеке utft (взять можно здесь). Да вот беда — русский то шрифт (кириллицу) ожидаемо не поддерживает. Будем исправлять. Первым делом роем интернет. Находим два решения: тут и тут. Первое не интересно тем, что для вывода на экран в кириллице требуется писать код вида:

 myGLCD.print("\x97""o""\x99""a", x, y);

, второй тем.. что тупо не компилируется со множеством ошибок..побороть которые в силу не очень уверенного знания c++ не представилось возможным.

Итог: на основе этих двух решений разработано собственное:

  1. Устанавливаем библиотеку utft
  2. Создаем пустой проект, сохраняем его
  3. В папку проекта закидываем вот этот шрифт: RussianFonts
  4. Далее в проект вставляем следующий код:
#include <UTFT.h>
#include <memorysaver.h>

UTFT tft(CTE32HR,38,39,40,41);
extern uint8_t SmallRusFont[];
extern uint8_t BigRusFont[];

const uint8_t utf8_rus_charmap[] PROGMEM = {'A',128,'B',129,130,'E',131,132,133,134,135,'K',136,'M','H','O',137,'P','C','T',138,139,'X',140,141,
142,143,144,145,146,147,148,149,'a',150,151,152,153,'e',154,155,156,157,158,159,160,161,162,'o',163,'p','c',164,'y',165,'x',166,167,168,169,170,
171,172,173,174,175};

void printRus(UTFT rus,char *st, int x, int y, int deg){
 int stl, i;
 stl = strlen(st);
 if (rus.orient==PORTRAIT){
	if (x==RIGHT) x=(rus.disp_x_size+1)-(stl*rus.cfont.x_size);
	if (x==CENTER) x=((rus.disp_x_size+1)-(stl*rus.cfont.x_size))/2;
 } else {
  if (x==RIGHT) x=(rus.disp_y_size+1)-(stl*rus.cfont.x_size);
  if (x==CENTER) x=((rus.disp_y_size+1)-(stl*rus.cfont.x_size))/2;
 }
 uint8_t utf_high_byte = 0;
 uint8_t ch, ch_pos = 0;
 for (i = 0; i < stl; i++) {
  ch = st[i];
   if ( ch >= 128) {
     if ( utf_high_byte == 0 && (ch ==0xD0 || ch == 0xD1)) {
         utf_high_byte = ch;
	  continue;
     } else {
     if ( utf_high_byte == 0xD0) {
	if (ch == 0x81) { //Ё
	  ch = 6;
	} else {
	if(ch <= 0x95) {
	   ch -= 0x90;
	} else if( ch < 0xB6){
	ch -= (0x90 - 1);
	} else {
	ch -= (0x90 - 2);
	}}
	ch = pgm_read_byte(utf8_rus_charmap + ch);
    } else if (utf_high_byte == 0xD1) {
           if (ch == 0x91) {//ё
	       ch = 39;
	   } else {
	    ch -= 0x80;
	    ch += 50;
	   }
           ch = pgm_read_byte(utf8_rus_charmap + ch);
	}
	utf_high_byte = 0;
   }
   } else {
     utf_high_byte = 0;
     }
     if (deg==0) {rus.printChar(ch, x + (ch_pos * (rus.cfont.x_size)), y);} else {
		  rus.rotateChar(ch, x, y, ch_pos, deg);
		}
      ++ch_pos;
 }
};
void setup(){  
  tft.InitLCD(LANDSCAPE);
  tft.clrScr();
  tft.setColor(VGA_BLACK);
  tft.fillRect(0,0, tft.getDisplayXSize()-1, tft.getDisplayYSize()-1);
  tft.setFont(BigRusFont);
  tft.setColor(VGA_WHITE);
  tft.setBackColor(VGA_TRANSPARENT);
  printRus(tft,"АБВГДЕЁЖЗИЙКЛМН", 0, 0,0);

  printRus(tft,"ОПРСТУФХШЩЬЫЪЭ", 0, 20,0); 
  printRus(tft,"ЮЯабвгдеёжзийкл", 0, 40,0);
  printRus(tft,"мнопрстуфхцчшщь", 0, 60,0);
  printRus(tft,"ыъэюя", 0, 80,0);
  tft.setFont(SmallRusFont);
  printRus(tft,"АБВГДЕЁЖЗИЙКЛМН", 0, 100,0);

  printRus(tft,"ОПРСТУФХШЩЬЫЪЭ", 0, 120,0); 
  printRus(tft,"ЮЯабвгдеёжзийкл", 0, 140,0);
  printRus(tft,"мнопрстуфхцчшщь", 0, 160,0);
  printRus(tft,"ыъэюя", 0, 180,0);
}

void loop()
{
}


Заливаем скетч в Arduino..и вуаля, получаем картинку вида:

04.08.15 - 1

Оказывается у Arduino Mega/Uno нет нормальной многопоточности…

ArduinoUno_r2_front450pxДумал в выходные про будущую реализацию «Умного дома».. Делал некоторые наброски и т.п.. Стало шоком, что оказывается в Arduino не реализована «железячная» многопоточность т.е. выполнение нескольких подпрограмм одновременно. Реализовать некое подобие можно при помощи костылей «выполнение по таймеру» и прерываний.. Но всё не то.. Так-же есть несколько скетчей, написаных на ассемблере, которые расширяют стандартный вход main в программе, и делают «некий программный аналог» многопоточности. Ну ближе к делу посмотрим… Знать бы конечно сразу, так возможно бы остановился на Raspberry Pi..но цена там конечно более кусачая.