pondělí 15. prosince 2014

WiFi modulek za 90 Kč

Náhodou jsem na eBay narazil na malý ale šikovný WiFi modulek Wi07c. Dokáže pracovat v režimech AP, jako klient a nebo obojí najednou. Po rozbalení stačilo připojit napájení, Rx a Tx a vývod CH_PD na +3,3 V.



neděle 14. prosince 2014

neděle 7. prosince 2014

OpenWRT a akcelerometr + kompas + gyro

Po zprovoznění I2C sběrnice si k ní můžeme připojit například obvody LSM303DLHC (akcelerometr + kompas) a nebo gyroskop L3GD20, vše skvěle zabaleno na STM32F3 Discovery Boardu. Na Discovery Boardu je nutné vymazat paměť MCU aby nám do komunikace "nekecal" a propojit následující vývody: PB6 na PA5, PB7 na PA7 a v neposlední řade zapojit PA6, tedy pin SA0 gyra, na logickou jedničku (výběr I2C módu).

středa 3. prosince 2014

OpenWRT a teploměr

I na posledním routeru jsem přešel na poslední verzi OpenWRT, tedy na 14.07 branch (Barrier Breaker).

Vše proběhlo bez problémů až na teploměr, ten je připojen prostřednictvím převodníku USB-RS232 s řadičem od FTDI. Digitemp používá 6-ti bitovou komunikaci, patne pro emulaci 1-wire prostřednictvím sériové linky. Bylo tedy nutné maličko upravit ovladač, jinak se v logu zobrazují následující hlášky a teploměr vůbec nefunguje:
ftdi_sio ttyUSB0: requested CSIZE setting not supported

Stačí provést úpravy v souboru /build_dir/target-mipsel_mips32_uClibc-0.9.33.2/linux-brcm47xx_generic/linux-3.10.49/drivers/usb/serial/ftdi_sio.c

Jedná se o sprosté zakomentování příslušné kontroly:

Řádek 2194:
 /*if (C_CSIZE(tty) == CS6) {
  dev_warn(ddev, "requested CSIZE setting not supported\n");

  termios->c_cflag &= ~CSIZE;
  if (old_termios)
   termios->c_cflag |= old_termios->c_cflag & CSIZE;
  else
   termios->c_cflag |= CS8;
 }*/

 cflag = termios->c_cflag;

 if (!old_termios)
  goto no_skip;

A doplnění volby do switche od řádku 2240

switch (cflag & CSIZE) {
 case CS5:
  dev_dbg(ddev, "Setting CS5 quirk\n");
  break;
 case CS6:
  dev_dbg(ddev, "Setting CS6\n");
  break;
 case CS7:
  urb_value |= 7;
  dev_dbg(ddev, "Setting CS7\n");
  break;

Další možností je použití patche:
http://patchwork.ozlabs.org/patch/306740/

Pro Asus 500gP je možné rovnou stahovat balíček z ulož.to.

pátek 14. listopadu 2014

UCI OpenWRT

Pro čtení a zápis parametrů konfiguračních souborů OpenWRT je možné použít UCI, viz několik příkladů:

čtvrtek 13. listopadu 2014

Pěkná jména pro rozšíření Majordomo Turris


Nelíbí se Vám v zobrazení Majordomo pouze MAC adresy? Tento skript vyčte z nastavení DHCP jména příslušející každé MAC a doplní je do souboru. Dokonce ani nevadí, že je do souboru připíše vícekrát, při aktualizace se duplicity odstraní.



sobota 8. listopadu 2014

Zprovoznění SPI, I2C a 1-wire na OpenWRT

Jak zprovoznit SPI na zařízení s OpenWRT, když nemá volný SPI port? Stačí jen najít několik volných GPIO pinů, nainstalovat pár balíčků a už to funguje.



pátek 7. listopadu 2014

Sledování výpadků připojení

#!/bin/sh

# Programátor řekl: nechť je toto voláno periodicky, nejlépe každou minutu
# při každém zavolání dejde k opingnutí strejdy googla,
# pokud se nedopingne, tak pěkně zalogovat čas první detekce výpadku
# a pěkně pokračujeme dále. Následně při úspěšném pokusu opingnutí strejdy googla
# se nám načte čas výpadku (ze souboru v /tmp) a spolu s časem náběhu se odešle na server

# vyzobneme počet úspěšných pingů (5 pingů, měly by se podařit alesoň dva)

tmpSoubor='/tmp/vypadek.txt'
testServer="google.com"
#testServer="google.comn"

ping $testServer -c 15 -q > /tmp/vysledek.txt 2>&1
Ping=`cat /tmp/vysledek.txt | sed -n -e 's/.*packets transmitted, \([0-9]*\).*/\1/p'`
rm /tmp/vysledek.txt
#echo "\"$Ping\""
minPing=2
if [[ -z "$Ping" ]]; then
    echo "Patrně nenalezen DNS záznam pro $testServer!"
else
    if [ $Ping -lt $minPing ]; then
            # sem to spadne při detekci výpadku
            if [ ! -f $tmpSoubor ]; then
                #sem to vleze jen při první rozpoznání výpadku
                    echo "Detekován výpadek připojení!"
                    date +"%Y-%m-%d%%20%H:%M:%S" > $tmpSoubor
            else
                    echo "Připojení nám nefunguje(již zalogováno)!"
            fi
    else
            echo "Připojení funguje!"
            #když nám funguje připojení a máme záznam o výpadku, tak ho naprášíme
            if [ -f $tmpSoubor ]; then
                    CasVypadku=`cat $tmpSoubor`
                    rm $tmpSoubor
                    dalsiCast='&VypadekKonec='
                    treticast=`date +"%Y-%m-%d%%20%H:%M:%S"`
                    Server="http://www.domena.cz/logovani/VlozeniPingDoDB.php?VypadekZacatek="
                    URL=$Server$CasVypadku$dalsiCast$treticast
                    echo $URL
                    wget -O /dev/null -q "$URL"
            fi
    fi
fi


čtvrtek 9. října 2014

DVB-T rekordér pro Turris

Nahrávač se skládá z několika sh a php skriptů. Nahrávač předpokládám zprovozněné streamování například pomocí MumuDVB, jak bylo popsáno v předchozím příspěvku. Každý program (TV kanál) má vyhrazen vlastní TCP port. Uživatelé tedy mohou zároveň sledovat všechny kanály jednoho multiplexu a ještě každý kanál nahrávat. Díky třem DVB-T kartám máme streamované všechny tři multiplexy. Pro zpracování uživatelem zadaných dat je soubor new_record.php. Ošetří, alespoň doufám, vstupní hodnoty a zavolá další soubor.

<html>
<head>
<meta charset="utf-8">
</head>
<body>
<?php
setlocale(LC_ALL, 'czech');
if (   isset($_REQUEST["DOBA_NAHRAVANI_MIN"])
    && isset($_REQUEST["ZACATEK_NAHRAVANI"])
    && isset($_REQUEST["NAZEV_SOUBORU"])
    && isset($_REQUEST["CISLO_KANALU"]))
{
    $DOBA_NAHRAVANI_MIN = intval($_REQUEST["DOBA_NAHRAVANI_MIN"]);
    $ZACATEK_NAHRAVANI = date("H:i d.m.y", strtotime(urldecode($_REQUEST["ZACATEK_NAHRAVANI"]))); // 11:35 01.10.14
    $URL = htmlspecialchars(urldecode($_REQUEST["NAZEV_SOUBORU"]));
    /*$URL = rtrim($URL, "_.");
    $URL = str_replace(" ", "_", $URL);*/
    echo "<p>\$URL=\"$URL\"</p>\n";
    $NAZEV_SOUBORU = preg_replace("/[^a-zA-Z0-9áäčďéěëíµňôóöŕřšťúůüýžÁÄČĎÉĚËÍĄŇÓÖÔŘŔŠŤÚŮÜÝŽ _-]/", "", $URL);
    $CISLO_KANALU = intval($_REQUEST["CISLO_KANALU"]);
   

sobota 23. srpna 2014

Build vlastního balíčku OpenWRT

Balíčky hnízdí v package/ a dále následuje další dělení ale to je z pohledu buildu nepodstatné.
Například v package/utils/hello/src/ si vytvoříme klasický hello world balíček.

Do souboru hello.cpp vložíme toto:

#include <iostream>
using namespace std;

int main()
{
  cout << "Funguje to, mame prvni balicek pro OpenWRT!" << endl;
  return 0;
}

neděle 6. července 2014

DVB-T karty pro Turris

MSI DIGIVOX Micro HD (RTL2832U + FCI2580)
Bus 001 Device 010: ID 1d19:1102 Dexatek Technology Ltd. DK mini DVB-T Dongle

[41340.837991] usb 1-1.1: new high-speed USB device number 5 using fsl-ehci
[41340.971314] usb 1-1.1: dvb_usb_v2: found a 'Dexatek DK mini DVB-T Dongle' in warm state
[41341.034039] usb 1-1.1: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
[41341.043649] DVB: registering new adapter (Dexatek DK mini DVB-T Dongle)
[41341.054517] usb 1-1.1: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...
[41341.070122] i2c i2c-2: fc2580: FCI FC2580 successfully identified
[41341.087003] Registered IR keymap rc-empty
[41341.091739] input: Dexatek DK mini DVB-T Dongle as /devices/soc.0/ffe22000.usb/fsl-ehci.0/usb1/1-1/1-1.1/rc/rc0/input0
[41341.102574] rc0: Dexatek DK mini DVB-T Dongle as /devices/soc.0/ffe22000.usb/fsl-ehci.0/usb1/1-1/1-1.1/rc/rc0
[41341.112547] usb 1-1.1: dvb_usb_v2: schedule remote query interval to 400 msecs
[41341.131248] usb 1-1.1: dvb_usb_v2: 'Dexatek DK mini DVB-T Dongle' successfully initialized and connected
 


Potřebné moduly:
insmod dvb-core.ko
insmod dvb-pll.ko
insmod rtl2830.ko
insmod rtl2832.ko
insmod qt1010.ko
insmod mt2060.ko
insmod mxl5005s.ko
insmod fc0012.ko
insmod fc0013.ko
insmod e4000.ko
insmod fc2580.ko
insmod tua9001.ko
insmod r820t.ko
insmod rc-core.ko
insmod dvb-usb.ko
insmod dvb_usb_v2.ko
insmod rtl2830.ko
insmod rtl2832.ko
insmod dvb-usb-rtl28xxu.ko


Nepotřebuje fw ve /lib/firmware.


středa 18. června 2014

Build Oscamu pro OpenWRT

Stačí stáhnout SDK pro používanou platformu (OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2.tar.bz2).
Dále ještě potřebujeme zdrojáky Oscamu, které získáme takto:

svn checkout http://www.streamboard.tv/svn/oscam/trunk oscam-svn
nebo určitou verzi Oscamu
svn checkout http://www.streamboard.tv/svn/oscam/tags/1.10 oscam-1.10

přejdeme do složky zdrojáků Oscamu
cd oscam-svn
a spustíme kompilaci:
make CROSS=mips-openwrt-linux- CROSS_DIR=../OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/bin/ STAGING_DIR=../OpenWrt-SDK-ar71xx-for-linux-i486-gcc-4.6-linaro_uClibc-0.9.33.2/staging_dir/

a výsledek máme ve /oscam-svn/Distribution.

Edit: pro aktuální verzi Turríska stačí následující:
make CROSS=powerpc-openwrt-linux- CROSS_DIR=../openwrt/staging_dir/toolchain-powerpc_8540_gcc-4.8-linaro_uClibc-0.9.33.2/bin/ STAGING_DIR=../openwrt/staging_dir/

Odkaz na překompilovanou verzi ze svn přikládám. Stačí jen přejmenovat na oscam, nakopírovat do /bin a konfiguráky si umístit do /etc/oscam a do /etc/init.d/ přidat soubor oscam s násleujícím obsahem:

#!/bin/sh /etc/rc.common
# JFíla

START=90
start()
{
        oscam -c /etc/oscam &
}

přidat práva: chmod +x /etc/init.d/oscam
chmod +x /bin/oscam
a povolit spouštění oscamu po startu: /etc/init.d/oscam enable
a nastartovat: /etc/init.d/oscam start

oscam-1.20-unstable_svn11198-powerpc-openwrt-linux-uclibcspe
http://uloz.to/xLr2D8JA/oscam-1-20-unstable-svn11198-powerpc-openwrt-linux-uclibcspe

https://forum.openwrt.org/viewtopic.php?pid=160086#p160086
http://www.streamboard.tv/oscam/wiki/GettingOscam
https://forum.openwrt.org/viewtopic.php?id=42695

čtvrtek 29. května 2014

Webserver pro Turris

Jako mnoho dalších nadšených uživatelů jsem se nedávno stal šťastným majitelem routeru Turris. Starý router jsem používal jako NAS i jako WEB server, obdobně jsem to udělal i s Turrisem. Výhodou Turrisu je ohromný výpočetní výkon i  velká paměť, není tedy nutné se příliš omezovat a je možné instalovat i aplikace používané na serverech, jako třeba Apache.
Takže k návodu:

sobota 8. února 2014

GPS přijímač pro fotoaparát Nikon

Většina zrcadlovek má konektor pro externí spoušť v případě Nikonu jsou zde piny +5V, GND, ostření (první poloha spouště), expozice (domáčknutí spouště) a vstup pro GPS data. Dle zdrojů se jedná o standardní NMEA protokol na 4800 Bd, stačilo tedy změnit výstupní rychlost GPS modulu RYN25AI založeném na modulu u-blox MAX-7. Speciální konektor byl vytěžen z drátové spouště zakoupené na e-bay, za méně než sto korun, pro mechanické uchycení do sáněk byla ještě zakoupena krytka BS-1. Plášt konektoru bylo nutné po straně opatrně naříznout a přepájet piny napájení a sériového portu.

Nastavení přenosové rychlosti se provádí odesláním následující sekvence, více podrobností je uvedeno v katalogovém listu GPS přijímače. Je vhodné použít například Hercules SETUP od HW serveru nebo Terminal by Br@y++. U prve zmíněného je nutné na kartě Serial zaškrtnou volbu HEX a příkaz odeslat. Druhý vyžaduje zadání bajtů v hexadecimálním formátu uvozené znakem $.

B5 62 06 41 09 00 01 01 30 81 00 00 00 00 FC FF 20

Zapojení pinů konektoru je popsáno na [1].


Kabel je mechanicky upevněn proti vytržení pomocí namáčknutého prstence z velké kancelářské sponky. V rozích jsou vyvrtány díry pro světlovody, levá - zelená indikuje přítomnost napájení GPS modulu a červená blikáním aktuálnost určení polohy.

 Přijímač je vložen do univerzální přístrojové krabičky, v pozadí je patrná přišroubovaná krytka pro sáňky na spodek krabičky. Vrut drží pohromadě oba díly krabičky a zároveň zamezuje otočení krabičky vůči sáňkám fotoaparátu.  


Materiál krabičky je vzhledově dosti podobný materiálu těla fotoaparátu.

[1] http://pinoutsguide.com/DigitalCameras/nikon_d90_pinout.shtml
[2] http://www.reyax.com/Module/GPS/RYN25AI/RYN25AI.pdf
[3] http://www.petermillerphoto.com/nikongps/nikongps2.html