Quantcast
Channel: Návody – RASPBBERRY Pi
Viewing all 17 articles
Browse latest View live

1. Raspbian – Instalace Rasbianu na SD kartu z windows

$
0
0

 

Raspbian

 

Jednoduchý návod, jak nainstalovat Rasbian na SD kartu ve win 7

 

 

 

  • Stáhněte si Rasbian zde (cca 800MB)
  • Vložte SD kartu do čtečky karet a zkontrolujete, jaké písmenko jednotky bylo přiřazeno.
  • Stáhněte si Win32DiskImager utility z Sourceforge Project page
  • Rozbalte ze zipu soubor a spusťte Win32DiskImager utility.(spouštět s právy administrátora přes pravé tlačítko myši)

Win32DiskImager

  • Vyberte image souboru
  • Vyberte písmenko jednotky SD karty
  • Klikněte na tlačítko Write a počkejte, než bude vše na kartu zapsáno
  • Ukončete program, vyndejte SD kartu, nyní je připravena pro první spuštění v RasppberyPi

2. Raspbian – první spuštění, základní nastavení

$
0
0

Možnosti prvního spuštění po vložení SD karty. Přímo přes RaspberryPi nebo vzdáleně přes SSH  z jiného PC.

raspberrypi_okno_raspiconfig

 Po vložení SD karty do RaspberryPi před zapojením napájení se můžeme rozhodnout, jak chceme konfigurovat základní nastavení. Můžeme zapojit přes HDMI kabel k monitoru a konfigurovat přímo na raspberrypi a nebo lze zapojit do LAN sítě a konfigurovat vzdáleně přes SSH.

První spuštění

a) první spuštění přes SSH z jiného PC

  • před samotném spuštění, se musí zkontrolovat nastavení roteru. Pro tento případ doporučuji nastavit přidělovaní IP adres přes DHCP. Zkontrolujeme, jaké jsou IP adresy před zapnutím raspberrypi právě aktivní. Po zapnutí pi, zkontrolujeme nově přidanou IP adresu a také mac adresu našeho raspberrypi – mělo by být zobrazeno s názvem Host Name → raspberrypi. Poté se hned může nastavit pomocí mac adresy statickou adresu, kterou se vždy přiřadí na danou mac adresu naše nastavená IP adresa, v tomto případě 192.168.0.104.

raspberrypi_okno_router_dhcp

  •  pro vzdálené připojení přes SSH bude nutné si stáhnout program putty zde přes který se budeme připojovat. Po spuštění si nastavíme IP adresu(192.168.0.104) a port pro SHH(v defaultu je nastaven 22), zaškrtnout Protocol SSH a pak dat open.

raspberrypi_okno_putty

  • objeví se okno pro přihlášení. V defaultu je username „pi“ a heslo „raspberry“, po úspěšném přihlášení se objeví již commnad line

raspberrypi_okno_prihlaseni

  •  nyní je dobré po prvním spuštění udělat základní nastavení přes příkaz „sudo raspi-config“

raspberrypi_okno_prikaz_raspiconfig

raspberrypi_okno_raspiconfig

 

 

b) první spuštění přímo přes RaspberryPi

  • pokud chceme spouštět přímo, bude nutné napojit pře USB klávesnici, myš, LAN a HDMI kabel plus monitor
  • po přípojení napájení naskočí ihned po prvním spuštění základní konfigurace pi. (lze se konfigurovat i později přes „sudo raspi-config“

 

Základní nastavení

 

  1. Expand Filesystem: zajišťuje, že celá velikost SD karty je k dispozici na OS

  2. Change User Password: změna hesla pro výchozího uživatele (pi)

  3. Enable Boot to Desktop-Scratch: vyberte, zda chcete spustit v prostředí desktopu, Scratch, nebo z příkazového řádku

  4. Internationalisation Options: Nastavit jazyk a místní nastavení, aby odpovídaly vaší poloze

  5. Enable Camera: povolení tohoto Pi práci s Raspberry Pi Kamera

  6. Add to Rastrack: přidat tuto Pi do on-line Pi Mapa Raspberry (Rastrack)

  7. Overlock: konfigurace přetaktování pro vaše Pi

  8. Advanced Options: konfigurace pokročilých nastavení

  9. About raspi-config: informace o tomto konfiguračním nástroji

 

Important!

po spuštění systému, je dobré spustit update a následně upgrade systému:

pi@raspberrypi  ~ $ sudo apt-get update

pi@raspberrypi  ~ $ sudo apt-get upgrade

 

Vzdálení připojení s GUI mezi Raspberry PI a WIN7 (RDP)

$
0
0

pokud by jste se chtěli připojit k Raspberry Pi s win7 přes remote desktop, tak je tu možnost nainstalovat xrdp pres SSH(putty) a pot0 se připojit přes remote desktop

xrdp_1

 

Install

Notice

sudo apt-get install xrdp

 

  • po nainstalování pak již stačí spustit remote desktop a zadat IP adresu vašeho Pi

   xrdp_2

  •  vyplnit login a potvrdit ok a tím dojde k připojení k vašemu Raspberry Pi

   xrdp_3

xrdp_4

 

 

Uninstall jenom xrdp

Odstraní jen samotný balíček xrdp.

Notice

sudo apt-get remove xrdp

 

 

Uninstall xrdp a jeho závislosti.

Odstraní balíček xrdp a jiné závislé balíčky, které již nejsou potřebné.

Notice

sudo apt-get remove –auto-remove xrdp

 

 

Vyčistí config

Pokud se také chcete odstranit config soubory xrdp.

Notice

sudo apt-get purge xrdp

Nebo

Notice

sudo apt-get purge –auto-remove xrdp

 

Existuje celá řada příkazů, start, stop, restart atd. Chcete-li získat seznam:

Notice

/etc/init.d/xrdp

xrdp_6_prikazy

 

 

Přiklad pro získání statusu:

Notice

/ /etc/init.d/xrdp status

xrdp_7_status

Sledování výkonu – HTOP

$
0
0

Skvělý pomocník pro sledování výkonu vašeho Pi z příkazové řádky.  (CPU, RAM, SWAP, uptime, průměrné využití CPU, atd.)

 

HTOP

 

 

Instalace

Notice

pi@raspberrypi  ~ $ sudo apt-get install htop

 

Spuštění

Notice

pi@raspberrypi  ~ $ htop

Midnight Commander (mc) – správce souborů pro systémy unixového typu

$
0
0

mc_logoMidnight Commander je textové uživatelské rozhraní pro snadnou správu souborů a adresářů, které se spustí z příkazové řádky (v okně textového terminálu a nebo přes SSH), spouštění programů, editace souborů,… Program je rozdělen do dvou panelu, menu a příkazového řádku.

 

Instalace

Notice

pi@raspberrypi  ~ $ sudo apt-get install mc

 

Spuštění (doporučuji spouštět přes sudo, aby bylo možné editovat soubory)

  • V barevném provedení

Notice

pi@raspberrypi  ~ $ sudo mc

mc

 

  • V černobílém provedení

Notice

pi@raspberrypi  ~ $ sudo mc -b

mc_b

Procházení WWW stránek z příkazové řádky

$
0
0

Procházení stránek z grafického rozhraní není žádný problém. Jak ale procházet stránky přes putty přímo z příkazové řádky. K tomu nám poslouží aplikace lynx.

lynx_3

 

Instalace

Notice

pi@raspberrypi  ~ $ sudo apt-get install lynx

 

Procházení

Notice

pi@raspberrypi  ~ $ lynx http://www.google.com

po stránkách se pohybujeme šipkami nahoru, dolu, stisknutím klávesy enter se potvrdí vybraná volba, občas chce potvrdit pomocí klávesy „Y“ cookies, poté bude pokračovat načítání stránky

lynx_1

lynx_2

 

 

3. Raspbian – Jak nainstalovat USB wifi TP-LINK TL-WN725N na Raspberry Pi

$
0
0

Jednoduchý postup na zprovoznění wifi USB TP-LINK TL-WN725N z příkazové řádky pro přiřazení IP DHCP nebo pro nastavení statické IP + automatické připojení wifi po startu Raspberry Pi

 TP-LINK TL-WN725N_0

1. doporučuje se udělat update a upgrade:

Notice

sudo apt-get upgrade
sudo apt-get update
sudo reboot

2. pak je nutné zjištění verze systému, podle které se pak stáhne daný ovladač

Notice

uname –a

TP-LINK TL-WN725N_1

podle zobrazené verze 3.12.22+ #691 si vybereme řádek s názvem souboru. V tomto případě to je 3.12.22+ #690, #691 – 8188eu-20140616.tar.gz. Zde si zkopírujeme do schránky 8188eu-20140616.tar.gz

3.6.11+ #371 up to #520 inclusive – 8188eu-20130209.tar.gz
3.6.11+ #524, #528, #532 – 8188eu-20130815.tar.gz
3.6.11+ #538, #541, #545, #551, #557 – 8188eu-20130830.tar.gz
3.10.18+ #577 – 8188eu-20131105.tar.gz
3.10.18+ #579, #585 – 8188eu-20131106.tar.gz
3.10.18+ #587 – 8188eu-20131110.tar.gz
3.10.18+ #590, #592 – 8188eu-20131111.tar.gz
3.10.18+ #594, #596 – 8188eu-20131113.tar.gz
3.10.19+ #600 – 8188eu-20131113.tar.gz
3.10.21+ #602, #604 – 8188eu-20131113.tar.gz
3.10.22+ #606 – 8188eu-20131206.tar.gz
3.10.23+ #608 – 8188eu-20131209.tar.gz
3.10.24+ #610 – 8188eu-20131209.tar.gz
3.10.24+ #614 – 8188eu-20131219.tar.gz
3.10.25+ #616, #618 – 8188eu-20131219.tar.gz
3.10.25+ #622, #624 – 8188eu-20131219.tar.gz
3.10.26+ #628 – 8188eu-20140110.tar.gz
3.10.27+ #630 – 8188eu-20140117.tar.gz
3.10.28+ #632, #634 – 8188eu-20140117.tar.gz
3.10.29+ #636, #638 – 8188eu-20140117.tar.gz
3.10.30+ #640, #642 – 8188eu-20140117.tar.gz
3.10.32+ #646, #648 – 8188eu-20140117.tar.gz
3.10.33+ #654, #656 – 8188eu-20140117.tar.gz
3.10.33+ #658 – 8188eu-20140117.tar.gz
3.10.34+ #660, #661 – 8188eu-20140117.tar.gz
3.10.36+ #662, #664 – 8188eu-20140117.tar.gz
3.10.36+ #665, #666 – 8188eu-20140117.tar.gz
3.10.37+ #667, #669 – 8188eu-20140117.tar.gz
3.10.38+ #675 – 8188eu-20140117.tar.gz
3.12.18+ #673, #677 – 8188eu-20140425.tar.gz
3.12.18+ #679, #680 – 8188eu-20140501.tar.gz
3.12.19+ #681, #682 – 8188eu-20140509.tar.gz
3.12.19+ #684 – 8188eu-20140509.tar.gz
3.12.20+ #685, #686 – 8188eu-20140509.tar.gz
3.12.20+ #687 – 8188eu-20140509.tar.gz
3.12.21+ #688, #689 – 8188eu-20140509.tar.gz
3.12.22+ #690, #691 – 8188eu-20140616.tar.gz
3.12.23+ #692 – 8188eu-20140626.tar.gz
3.12.24+ #693, #694 – 8188eu-20140705.tar.gz
3.12.25+ #698, #700 – 8188eu-20140705.tar.gz
3.12.25+ #701 – 8188eu-20140705.tar.gz

 3.  upravíme příkazy, kde se objevuje název, který mamé ve schránce a postupně vykonáme příkazy níže

 

Notice

wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20140616.tar.gz
tar -zxvf 8188eu-20140616.tar.gz
sudo install -p -m 644 8188eu.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless
sudo insmod /lib/modules/$(uname -r)/kernel/drivers/net/wireless/8188eu.ko
sudo depmod –a

 

4. nyní se můžeme rozhodnout, zda se přpojíme přes GUI a nebo přes příkazový řádek, kde lze nastavit i automatické připojování k síti po startu Raspberry Pi

 

A) z příkazové řádky
    • DHCP
      • editace souboru s nastavením -> interfaces

Notice

sudo nano /etc/network/interfaces

auto wlan0 – díky tomuto řádku, se bude automaticky připojovat k síti

Notice

auto wlan0

allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

TP-LINK TL-WN725N_2_interfaces

 (Ctrl+x -> a potvrdit y)

      • editace souboru s nastavením wifi sítě -> wpa_supplicant.conf

Notice

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Notice

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid=“NAME“
psk=“PASSWORD“
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}

TP-LINK TL-WN725N_3_wpa_supplicant.conf

 (Ctrl+x -> a potvrdit y)

      • pak už stačí udělat restart Pi a po naběhnutí si zjistit přidělěnou IP adresu na wifi routeru

Notice

sudo reboot

TP-LINK TL-WN725N_3_router

    • Statická IP
      •  editace souboru s nastavením -> interfaces

Notice

sudo nano /etc/network/interfaces

auto wlan0 – díky tomuto řádku, se bude automaticky připojovat k síti

Notice

auto wlan0

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.0.115
netmask 255.255.255.0
gateway 192.168.0.1
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

TP-LINK TL-WN725N_4_interfaces

 (Ctrl+x -> a potvrdit y)

      • editace souboru s nastavením wifi sítě -> wpa_supplicant.conf

Notice

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Notice

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid=“NAME“
psk=“PASSWORD“
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}

TP-LINK TL-WN725N_3_wpa_supplicant.conf

 (Ctrl+x -> a potvrdit y)

 

      • pak už stačí udělat restart Pi

Notice

sudo reboot

 

 

B) přes GUI

    • na ploše kliknout na ikonu pro WIFI Config

TP-LINK TL-WN725N_5_GUI_1

    •  kliknout na Scan

TP-LINK TL-WN725N_5_GUI_2

    • vybrat a kliknout na síť, v tomto případě je to pod názvem 24JP

TP-LINK TL-WN725N_5_GUI_3

    • vyplnit heslo a kliknout na tlačíto Add (přidat)

TP-LINK TL-WN725N_5_GUI_4

    • vybrat síť a kliknout na Connect a poté dojde k připojení

TP-LINK TL-WN725N_5_GUI_5

 

 

4. Raspbian – Jak udělat print screen v GUI

$
0
0

Čas od času je někdy třeba si udělat print screen plochy a k tomu slouží program scrot.

scrot_0

Instalace z příkazové řádky

Notice

sudo apt-get- install scrot

 

Spustíme si GUI

Notice

startx

 

Uděláme dvojklik na ikonu LXTerminalu:

scrot_1

 

Základní použití:

Nyní stačí již napsat pro vytvoření printscreenu plochy napsat do konzole:

Notice

scrot

a obrázek se uloží do adresářové struktury /home/pi/ s defailnim filename složený z času a rozlišení např:

2014-08-14-165516_1920x1080_scrot.png

Pokud chceme dát hned jiné umístění s jiným jménem souboru, tak stačí zadat tento příkaz:

Notice

Scrot /home/pi/mojejmeno.png

Další vhodný způsob pořízení, je zadáním příkazu se zpoždením (v tomto případě je nastaveno 10 sekund), kde pak je čas na přípravu plochy pro screen:

Notice

scrot –d 10

 

Různé příklady zápisů do definovaného jména souboru:

  • Screen Shot plochy:

Notice

scrot /desktop.png
  • Screen Shot okna:

Notice

scrot -s /window.png
  • Zpoždění:

Notice

scrot -d 5 /delay.png
  • Zpoždění s odpočtem:

Notice

scrot -cd 5 /countdown.png
  • Screen Shot náhledu:

Notice

scrot -t 25% /thumb.png
  • S nastavením kvality:

Notice

scrot -q 70 /quality.png

 

-h    Display additional help

-v    Get the current version

-d X  Add a delay of X seconds to the capture

-c    Add a countdown to a delayed capture

-s    Allow user to specific capture area with the mouse

-u    Capture the current active window

-q X  Specify the image quality percentage X (default 75)

-t X  Create a thumbnail version at a specified percentage size X

-e    Specify a command to run after the image is capture

 

Speciální stringy:

$f  image path/filename (ignored when used in the filename)

$m  thumbnail path/filename

$n  image name (ignored when used in the filename)

$s  image size (bytes) (ignored when used in the filename)

$p  image pixel size

$w  image width

$h  image height

$t  image format

$$  prints a literal ‚$‘

\n  prints a newline (ignored when used in the filename)

 

Příklady zápisu 

[/notice]scrot ‚%Y-%m-%d–%s_$wx$h_strings.png[/notice]

 

 


1. Zapojení DS2482S-100 (I2C-1wire) a teplotních čidel (DS18B20) – součástky, zapojení, instalace, nastavení, MySQL, PHP, WEB, Android aplikace

$
0
0

tak jsem se konečně dostal k odzkoušení a vytvoření jednoduchého návodu na kontrolu teploty v domácnosti za použití 1wire sběrnice DS2482S-100 a teplotních čidel DS18B20. Pro ukládání dat jsem použil DB MySQL a ukládání je řešeno za pomocí PHP skriptu. Pro zobrazení na webu jsem použil doménu raspberry-pi.eu, kterou hostuji doma na svém Pi (mám veřejnou IP), php a java script. Další možností kontroly teplot doma, je přes chytré zařízení běžící pod systémem android (bez veřejné IP to bude fungovat pouze doma na stejné síti)

zapojení do nepájivého p

zapojení do nepájivého p

 

1. Součástky a zapojení

  • DS18B20 teplotní čidlo
  • DS2482S-100 I2C na 1wire
  • MS-DIP na SO-8 redukce
  • 4.7 kOhm odpor
  • kabely a nepájivé pole
  • telefonní kabel na zavedení čidel do místností

 

velikost DS2482S-100

velikost DS2482S-100

 

základním a nejtěžším úkolem je napájení sběrnice  DS2482S-100 na plošňák SO-8, kterým pak můžeme vkládat do nepájivého pole

 

DS2482S-100 na SO-8

DS2482S-100 na SO-8

 

dále je potřeba vše dát dohromady. V mém případě mám jedno teplotní čidlo zapojeno přímo v nepájivém poli a připraven pro napojení dalších teplotních čidel (viz. druhý obrázek níže v pravém rohu)

zapojení do nepájivého pole

zapojení do nepájivého pole

schéma zapojení

schéma zapojení

zapojení do nepájivého p

zapojení do nepájivého p

zde je vidět, jak tam jsou navíc zapojené kabely (pro přenos dat jsem použil telefonní kabel - 4linku a jeden není použit) od ostatních čidel rozmístěných po bytě. Výhodou tohoto zapojení je, že se na jeden kabel dají napojit veškerá čidla (pokud to je jedním směrem), protože jsou zapojené do sběrnice

zapojení

zapojení

 

 2. Nainstalování a nastavení Pi

  • nejprve odstraňte I2C moduly z jádra černé listiny.

Notice

sudo nano /etc/modprobe.d/raspi-blacklist.conf

zakomentujte řádek přidání „#“ na začátku řádku

Notice

#blacklist i2c-bcm2708

uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

  • pro nastavení nahrání modulů při startu je potřeba upravit tento soubor

Notice

sudo nano /etc/modules

přidat tyto dva řádky

Notice

i2c-bcm2708
i2c-dev

uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

  •  instalace některých nástrojů pro práci s I2C

Notice

suddo apt-get install i2c-tools python-smbus
  •  teplotní čidlo již komunikuje a pro získání teploty je potřeba nainstalovat owfs a ow-shell balíček

Notice

apt-get install owfs ow-shell
  • vytvoření adresáře, kde se potom budou ve složkách objevovat připojené teplotní čidla

Notice

sudo mkdir /mnt/1wire
  •  nyní je potřeba upravit soubor ows.conf

přidání „#“ na začátek řádku

Notice

#server: FAKE = DS18S20,DS2405

přidání těchto řádků na konec souboru

Notice

device = /dev/i2c-1
mountpoint = /mnt/1wire
Celsius
allow_other
error_print = 0
error_level = 0

 uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

  • poslední soubor, který je třeba také upravit je fuse.conf

odstranění „#“ na začátku řádku u

Notice

user_allow_other

uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

  • po těchto změnách je dobré pro jistotu udělat restart Pi

Notice

sudo reboot
  • po naběhnutí Pi se musí spustit „owfs“

Notice

owfs
  •  pak už stačí spustit midnight commander a doklikat se do složky /mnt/1wire/

Notice

sudo mc

zde jsou vidět tři adresy teplotních senzorů

MC_mmt_1wire

MC_mmt_1wire

jeden si vybereme a najedeme na soubor temperature a dáme F3

MC_mmn_1wire

MC_mmn_1wire

a zde je aktuální teplota na daném senzoru

MC_mmn_1wire

MC_mmn_1wire

ještě je potřeba udělat jednu důležitou věc a to nastavení automatického spuštění „owfs“ po startu

Notice

sudo crontab -e

na konec přidáme tento řádek

Notice

@reboot sudo -u root owfs

uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

 

3. Nastavení automatického ukládání dat z jednotlivých čidel do databáze MySQL pomocí PHP skriptu

 

nejprve se musí nainstalovat appace, mysql a php do Raspberry Pi (pokud již není nainstalováno)

Notice

sudo apt-get install apache2 php5 php5-mysql mysql-server

po instalaci a zadání hesla pro uživatele „root“ pro MySQL vytvoříme databazi „develop“

Notice

CREATE DATABASE develop;

pro ukládání dat do DB jsem zvolil dvě tabulky a jeden pohled

Notice

CREATE TABLE `teplomery` (
`rid` INT(11) NOT NULL AUTO_INCREMENT,
`nazev` VARCHAR(25) COLLATE utf8_czech_ci NOT NULL,
`adresa` VARCHAR(255) COLLATE utf8_czech_ci NOT NULL,
`stav` TINYINT(4) NOT NULL DEFAULT ’1′,
PRIMARY KEY (`rid`)
);

do této tabulky je potřeba vložit názvy a adresy teploměru

Notice

INSERT INTO teplomery (nazev,adresa) VALUES (‚obyvak_pc_stul’, ’28.869481050000′);
INSERT INTO teplomery (nazev,adresa) VALUES (‚chodba’, ’28.909581050000′);
INSERT INTO teplomery (nazev,adresa) VALUES (‚loznice’, ’28.93BB81050000′);

tabulka pro ukládání teplot

Notice

CREATE TABLE `teploty` (
`rid` INT(11) NOT NULL AUTO_INCREMENT,
`teplomer` INT(11) NOT NULL,
`teplota` DECIMAL(10,4) NOT NULL,
`InsDT` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`rid`),
KEY `FK_teplomer` (`teplomer`),
CONSTRAINT `teploty_ibfk_1` FOREIGN KEY (`teplomer`) REFERENCES `teplomery` (`rid`) ON UPDATE CASCADE
);

a pohled pro výběr dat (stav je označení pro aktivní teploměr  -> 1 aktivní, 0 neaktivní)

Notice

CREATE VIEW `teploCsv` AS
SELECT
DATE_FORMAT(`a`.`InsDT`,’%Y-%m-%d %H:%i’) AS `dt`,
`b`.`rid` AS `ID`,
`b`.`nazev` AS `nazev`,
`a`.`teplota` AS `teplota`
FROM (`teploty` `a`
JOIN `teplomery` `b`
ON (((`a`.`teplomer` = `b`.`rid`)
AND (`b`.`stav` > 0))));

defaultní umístění adresáře pro www je /var/www/ kde je potřeba vytvořit PHP skript, který se napojí do DB a pak nastavení v CRONu pro automatické volání tohoto PHP skriptu, který se bude pravidelně spouštět a ukládat teploty

Notice

sudo nano temperaturesensor.php

vložíme tento skript, kde je potřeba změnit heslo pro root uživatele

Notice

<?php
/*
* Writes temperature Data to DB
*
*/
$mysqlhost=“localhost“;
$mysqluser=“root“;
$mysqlpwd=“pwd“;
$mysqldb=“develop“;

$temperatureSensorPath1 = „/mnt/1wire/28.869481050000/temperature“;
$temperatureSensorPath2 = „/mnt/1wire/28.909581050000/temperature“;
$temperatureSensorPath3 = „/mnt/1wire/28.93BB81050000/temperature“;
// — Read sensor data —
$tempSensorRawData1 = implode(“, file($temperatureSensorPath1));
$temperature1 = $tempSensorRawData1;

$tempSensorRawData2 = implode(“, file($temperatureSensorPath2));
$temperature2 = $tempSensorRawData2;

$tempSensorRawData3 = implode(“, file($temperatureSensorPath3));
$temperature3 = $tempSensorRawData3;

// — Write Data to DB —

$connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die („Could not$
mysql_select_db($mysqldb, $connection) or die(„Could not select DB!“);
$sql_query_1 = „INSERT INTO teploty (teplomer,teplota) VALUES (’1′, $temperatur$
mysql_query($sql_query_1);
$sql_query_2 = „INSERT INTO teploty (teplomer,teplota) VALUES (’2′, $temperatur$
mysql_query($sql_query_2);
$sql_query_3 = „INSERT INTO teploty (teplomer,teplota) VALUES (’3′, $temperatur$
mysql_query($sql_query_3);

?>

nastavení CRONu

Notice

sudo crontab -e

vložíme tento řádek, kde je nastaveno, že skript bude do DB ukládat data každých 5 minut

Notice

*/5 * * * * php -f /var/www/temperaturesensor.php

 

4. Vytvoření skriptů pro zobrazení dat na webu

najedeme do adresáře pro www a zde se musejí vytvořit tři skripty. dallas.php je skript, který se bude spouštět a volat skript pro získání dat z DB dallas.csv.php a pro graf dygraph-combined.js.

první skript dallas.php

Notice

sudo nano dallas.php

vložíme tento skript a je nutné upravit na local host. (ja mám veřejnou IP a běží mi to na doméně raspberry-pi.eu)

Notice

<?php if(is_int($_GET['period'])) {
$params = “;
}
?> <html> <head>
<script type=“text/javascript“ src=“dygraph-combined.js“></script>
<style>
div {font: calibri}
</style>
<!–link rel=“stylesheet“ href=“bootstrap.min.css“>
<link rel=“stylesheet“ href=“site.css“–> </head> <body>
<div id=“graphdiv“ style=“width:1000px; height:600px; float:left“></div>
<div id=“labelsdiv“ style=““></div>
<script type=“text/javascript“>
g2 = new Dygraph(
document.getElementById(„graphdiv“),
„http://www.raspberry-pi.eu/dallas.csv.php<?php echo $params; ?>“, // p$
{// options
hideOverlayOnMouseOut: 0,
rollPeriod: 5,
showRoller: true,
labelsDiv: labelsdiv,
labelsSeparateLines: true,
legend: „always“
}
);
</script> </body>
</html>

druhý skript dallas.csv.php

 

Notice

sudo nano dallas.csv.php

zde je opět nutné změnit heslo

Notice

<?php
header („Content-Type:text/csv“);

isset($_GET['dtMin']) ? $dtMin = date(„Y-m-d H:i:s“, intval($_GET['dtMi$
date("Y-m-d H:i:s", time() - 86400); //den = 86400
isset($_GET['dtMax']) ? $dtMax = date(„Y-m-d H:i:s“, intval($_GET['dtMa$
date("Y-m-d H:i:s", time());
isset($_GET['T']) ? $tmer = “ AND nazev=’{$_GET['T']}‘ “ : $tmer = „“;

$db = mysqli_connect(„localhost“, „root“, „pwd“, „develop“);
mysqli_query($db, „SET NAMES UTF8″) or die(„chyba set names“);

$data = mysqli_query($db, „SELECT * FROM teploCsv WHERE dt BETWEEN ‚$dt$
‚$dtMax‘ ORDER BY nazev, dt“);

while($row = mysqli_fetch_array($data))
{
$teplomery[$row['nazev']]['nazev'] = $row['nazev'];
$teploty[$row['dt']][$row['nazev']] = $row['teplota'];
}

$nazvy = array_keys($teplomery);
$casy = array_keys($teploty);

echo ‚ďż˝as’;
foreach($nazvy as $nazev)
{
echo ‚,‘ . $nazev;
}
echo „\n“;

foreach($casy as $cas)
{
echo $cas;
foreach($nazvy as $nazev)
{
echo ‚,‘ . $teploty[$cas][$nazev];
}
echo „\n“;

}
?>

ještě poslední skript, který je potřeba vytvořit je pro zobrazení grafu

Notice

sudo nano dygraph-combined.js

a vložit tyto data dygraph-combined.js

 

pak už stačí jenom spustit prohlížeč */dallas.php

www_zobrazení

www_zobrazení

 

5. Vytvoření aplikace pro Android zařízení, extrakce dat z MySQL DB za použití PHP, JSON (toto je možné za předpokladu veřejné IP na Raspberry PI, jinak bude funguvat pouze doma po připjení na domací síť)

vytvoření aplikace pomocí vývojového prostředí Eclipse. Zde v tomto skriptu je nutné změnit na vaši IP (HttpPost httppost = new HttpPost(„http://localhost/android.php“);) na Pi popřípadě na localhost  - jedná se o volaný PHP skript, který vrací data ve formátu JSON (nebudu zde rozvádět krok po kroku vývoj aplikací pro android zařízení) – do tohoto skriptu byl použit font led_real, který se musí přidat do assets do projektu v eclipse

Notice

package cz.androidapk.teplota;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import cz.androidapk.teplota.R.id;
import android.os.Bundle;
import android.os.StrictMode;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.graphics.Typeface;
import android.util.Log;
import android.view.Menu;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

public class MainActivity extends Activity {
TextView resultView;
TextView resultViewTeplomer1;
TextView resultViewTeplota1;
TextView resultViewTeplomer2;
TextView resultViewTeplota2;
TextView resultViewTeplomer3;
TextView resultViewTeplota3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
//StrictMode.enableDefaults();
// Font path
String fontPath = „led_real.ttf“;
// text view label
resultView = (TextView) findViewById(id.resultView);
resultViewTeplomer1 = (TextView) findViewById(id.textViewTemplomer1);
resultViewTeplota1 = (TextView) findViewById(id.textViewTeplota1);
resultViewTeplomer2 = (TextView) findViewById(id.textViewTeplomer2);
resultViewTeplota2 = (TextView) findViewById(id.textViewTeplota2);
resultViewTeplomer3 = (TextView) findViewById(id.textViewTeplomer3);
resultViewTeplota3 = (TextView) findViewById(id.textViewTeplota3);
// Loading Font Face
Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);

// Applying font
// resultViewTeplota1.setTypeface(tf, Typeface.BOLD);
resultViewTeplota1.setTypeface(tf);
resultViewTeplota2.setTypeface(tf);
resultViewTeplota3.setTypeface(tf);

StrictMode.enableDefaults();
//StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);
getData();
}
public void getData(){
String result = „“;
InputStream isr = null;
//get data from HTTP
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(„http://localhost/android.php“);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
isr = entity.getContent();
}catch(Exception e) {
Log.e(„log_tag“,“Error on HTTP connection “ + e.toString());
resultView.setText(„Couldnt connect to DB“);
}
//convert response string
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(isr,“iso-8859-1″), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null){
sb.append(line + „\n“);
}
isr.close();
result = sb.toString();
}catch(Exception e){
Log.e(„log_tag“,“Error converting result „+ e.toString());
}
//parse json data
try{
//String s = „“;
String cas = „“;
String teplomer1 = „“;
String teplota1 = „“;
String teplomer2 = „“;
String teplota2 = „“;
String teplomer3 = „“;
String teplota3 = „“;

JSONArray jArray = new JSONArray(result);

for(int i=0; i<jArray.length(); i++){
JSONObject json = jArray.getJSONObject(i);

if (i==0){
cas = json.getString(„dt“);
teplomer1 = json.getString(„nazev“);
teplota1 = json.getString(„teplota“);
}
if (i==1){

teplomer2 = json.getString(„nazev“);
teplota2 = json.getString(„teplota“);
}
if (i==2){

teplomer3 = json.getString(„nazev“);
teplota3 = json.getString(„teplota“);
}
//s = s +
//“dt : “ + json.getString(„dt“) + „\n“ +
//“ID : “ + json.getString(„ID“) + „\n“ +
//“nazev : “ + json.getString(„nazev“) + „\n“ +
//“teplota : „+ json.getString(„teplota“)+ „\n\n“;
}

resultView.setText(cas);

resultViewTeplomer1.setText(teplomer1);
resultViewTeplota1.setText(teplota1);
resultViewTeplota1.setTextSize(80);
resultViewTeplota1.setTextColor(Color.parseColor(„#00ccff“));

resultViewTeplomer2.setText(teplomer2);
resultViewTeplota2.setText(teplota2);
resultViewTeplota2.setTextSize(80);
resultViewTeplota2.setTextColor(Color.parseColor(„#66FF00″));

resultViewTeplomer3.setText(teplomer3);
resultViewTeplota3.setText(teplota3);
resultViewTeplota3.setTextSize(80);
resultViewTeplota3.setTextColor(Color.parseColor(„#FF0033″));

}catch (Exception e){
Log.e(„log_tag“, „Error Parsing data „+ e.toString());
}

}
}

 

najedeme do adresáře  na Raspberry Pi pro www a zde je potřeba vytvořit skript – android.php.

první skript android.php

Notice

sudo nano android.php

vložíme tento skript a je nutné upravit na localhost (já mám veřejnou IP a běží mi to na doméně raspberry-pi.eu)

Notice


<?php
$connect=mysql_connect(„localhost“,“jméno“,“heslo“) or die(„Unable $
mysql_select_db(„develop“) or die(„Could not open the db“);

$query = „SELECT * FROM teploCsv order by Dt desc, ID asc limit$
$result = mysql_query($query, $connect);

while ($row = mysql_fetch_assoc($result)) {
$output[]=$row;
}

print(json_encode($output));

mysql_close($connect);
?>

pak už stačí být připojen s telefonem k internetu a při každém spuštění aplikace se načte poslední datum aktualizace DB spolu s teplotami

android

android

2. NAS server – synchronizace dvou disků (RSYNC) + sdílení souborů (SAMBA)

$
0
0


NAS_0

Jednoduchý postup jak využít Raspberry Pi v domácnosti, jako síťové úložiště a zároveň i pro zálohování dat. Pro síťové úložiště postačuje jeden USB disk naformátovaný například na NTFS, aby šlo kdykoliv odpojit a přehrát v systémech windows. Samozřejmě, pro rychlejší přenos dat je lepší mít disk pro síťové úložiště například v EXT4, protože Raspberry Pi k němu přistupuje rychleji. Abychom mohli provádět automatickou zálohu dat, tak je potřeba ješte jeden USB disk. V tomto návodu jsem použil na obou discích formátování NTFS.

 

jinak z mojí zkušenosti, bych doporučil mít ten disk USBHDD1 (který slouží jak síťový) naformátovaný na EXT4 a to pro rychlejší download/upload a druhý disk USBHHD2 (zálohovací) jako NTFS, protože pokud někam vyrazíte na cesty, a budete chtít mít například všechny fotky sebou, tak si je můžete přehrát na PC,TV,.. právě z toho USBHHD2, který je naformátován na NTFS. Síťový disk je stále dostupný, sice se dočasně nezálohuje, ale vše funguje jak má. Po příjezdu domů, zapojíte opět zpět do Raspberry Pi a následující den bude opět záloha aktuální

 

 

HDD – příprava

Podpora NTFS disků

Notice

sudo apt-get install ntfs-3g
sudo fdisk -l

Vytvoření adresářů pro přípojné disky

Notice

sudo mkdir /media/USBHDD1
sudo mkdir /media/USBHDD2

Automatické připojení disku na základě UUID

Notice

sudo blkid

Vzít UUID disků a upravit tento soubor

Notice

sudo nano /etc/fstab

přidat tyto řádky, oddělovač je tabulátor

Important!

UUID=756dfe8e-1ab6-4933-be98-776e38f97857 /media/USBHDD1 ntfs
UUID=756dfe8e-1ab6-4933-be98-776e38f97852 /media/USBHDD2 ntfs

uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

Remount FSTAB

Notice

sudo mount -a

Vytvoření adresářů pro sdílení

Notice

sudo mkdir /media/USBHDD1/NASDRIVE
sudo mkdir /media/USBHDD2/BACKUPS

Nastavení práv pro sdílené adresáře

Notice

sudo chmod -R 777 /media/USBHDD1/NASDRIVE
sudo chmod -R 777 /media/USBHDD2/BACKUPS

 

RSYNC

Instalace RSYNC

Notice

sudo apt-get install rsync

Nastavení CRONu pro automatickou synchronizaci dvou disků

Notice

sudo crontab -e

doplnit nakonec souboru tento řádek

Important!

15 4 * * * rsync -av –delete /media/USBHDD1/NASDRIVE/ /media/USBHDD2/BACKUPS/

nyní se synchronizace disků bude spoustět každý den ve 04:15. Popis jednotlivých možností spouštění:

      • Minuta (0–59)
      • Hodina (0–23)
      • Den v měsíci (1–31)
      • Měsíc (1–12)
      • Den v týdnu (0 = neděle, 1 = pondělí, …, 6 = sobota)

test funkčnosti lze vyzkoušet z příkazového řádku

Notice

rsync -av –delete /media/USBHDD1/NASDRIVE/ /media/USBHDD2/BACKUPS/

 

SAMBA

Instalace SAMBy

Notice

sudo apt-get install samba samba-common-bin

Záloha a editace konfiguračního souboru

Notice

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.old
sudo nano /etc/samba/smb.conf

 

Odstranění „#“ u řádku security

 

NAS serve SAMBA

NAS server – SAMBA

Dole přidat nastavení sdílené složky u HDD1

Important!

[Backup]
comment = Backup Folder
path = /media/USBHDD1/NASDRIVE
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
read only = no

Resatart SAMBy

Notice

sudo /etc/init.d/samba restart

 

Vytvoření SAMBa uživatele

Notice

sudo useradd backups -m -G users
sudo passwd backups

 

Přidání uživatele do SAMBa users

Notice

sudo smbpasswd -a backups

 

Seznam users v SAMBě

Notice

sudo pdbedit -L -v

 

3. Vzdálené ovládání zásuvky na 220V přes ssh, android zařízením…

$
0
0

Zasuvka220Rele_1

Další možnost využití Raspberry Pi v domácnosti :). Před časem jsem si pořídil zařízení WD My Cloud – 3TB od western digital (byl za cenu HDD) a zjistil jsem, že není třeba, aby zařízení běželo 24/7. Spotřeba tohoto zařízení v klidovém stavu je cca 6-10 watů, a to o proti raspberry pi je téměř 5ti násobné. Jenže takovéto domácí cloudy se dají pouze vypnout přes webové rozhraní, ale už nejdou nijak vzdáleně spustit. Jak to tedy udělat, aby si každý v domácnosti toto zařízení sám vzdáleně spustil, popřípadě zkontroloval, zda již neběží. (Samozřejmostí je mít veřejnou IP adresu, aby se to dalo ovládat i přes internet. Pokud není, tak bude fungovat pouze na místní síti).

 

 

 

 

Základní součástky a zapojení

  • relé
  • prodlužovací kabel se zásuvkou na 220V o délce 1,5m
  • mikro spínač
  • odpor 10K
  • kabely a nepájivé pole

 

zapojení tlačítka

bude umístěné na stole v nepájivém poli pro případné zapnutí, vypnutí NAS serveru (pokud člověk nechce zapínat přes aplikaci přes telefon, popřípadě přes ssh), zapojeného do této zásuvky

Zasuvka220Rele_5Zasuvka220Rele_6

Zasuvka220Rele_4Zasuvka220Rele_3

prodlužovací kabel se zásuvkou + relé

Zasuvka220Rele_8  Zasuvka220Rele_10

 

kabel pro ovládání relé

nůžkami jsem odstřihnul 4 pin, tak aby to šlo zastrčit do relé

Zasuvka220Rele_11 Zasuvka220Rele_12 Zasuvka220Rele_13 Zasuvka220Rele_17

 

 

Ovládání pomocí mikrotlačítka

skript pro ovládání tlačítkem, musí nejdříve zkontrolovat stav (zapnuto/vypnuto) a poté udělat příslušnou operaci.

vytvoření skriptu button.py

Notice

sudo nano button.py

a vložit

Notice


def main():

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

GPIO.setup(19,GPIO.IN)
GPIO.setup(26,GPIO.OUT)

while True:
if GPIO.input(19):
testButton = „false“
else:
testButton = „true“

#print testButton
time.sleep(0.15)

if GPIO.input(26):
testZasuvka = „true“
else:
testZasuvka = „false“

# print testZasuvka
time.sleep(0.15)

if(testButton==“true“ and testZasuvka==“true“):
GPIO.output(26,False)
if (testButton==“true“ and testZasuvka==“false“):
GPIO.output(26,True)

#GPIO.cleanup()

if __name__==“__main__“:
main()

uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

aby se tento skript automaticky vždy spustil po startu RPi (aby mohlo být tlačítko obslouženo, v případě stisknutí), tak je nutné dodat řádek do cronu s nastavením pro tento skript

Notice

sudo crontab -e

na konec přidáme tento řádek

Notice

@reboot sudo python /home/pi/button.py

uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

Ovládání a kontrola stavu pomocí konzole (přes SSH)

vytvoření skriptu status.py pro kontrolu stavu, zda je nyní zásuvka zapnutá, popřípadě vypnutá

Notice

sudo nano status.py

a vložit

Notice

import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(26,GPIO.OUT)

if GPIO.input(26):
testZasuvka = „running“
else:
testZasuvka = „stopped“

print testZasuvka
#GPIO.cleanup()

 uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

test skriptu status.py

Zasuvka220Rele_18

vytvoření skriptu cloud.py pro zapnutí, popřípadě vypnutí (záleží na tom, v jakém je to aktuálním stavu)

Notice

sudo nano cloud.py

a vložit

Notice

import RPi.GPIO as GPIO
import time
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(26,GPIO.OUT)
if GPIO.input(26):
GPIO.output(26,False)
testZasuvka = „stopped“
else:
GPIO.output(26,True)
testZasuvka = „running“
print testZasuvka
#GPIO.cleanup()

uzavřít a uložit soubor (CTRL+x a pak „y“ a enter)

test skriptu cloud.py

Zasuvka220Rele_19

 

Ovládání a kontrola stavu přes Android zařízení 

pro ovládání přes internet je nutné mít veřejnou IP adresu. (Jinak funguje pouze po připojení v místní síti). Ve skriptu programu pro android, se při spuštění zkontroluje současný stav přes StatusCloud()  – zavolá dotaz na PHP skript (android_cloud.php) a tento skript zavolá skript pro zjištění stavu v PYTHONu (status.py viz. výše), pak se zjistí google účet (GetUserAccount()) a ID zařízení (GetAndroidID()) a to z toho důvodu, aby ovládání zásuvky ovládal jen oprávněný uživatel a nemohlo dojít k nějakému zneužití :). Poslední metodou tam je CloudControl(), který může ovládat zásuvku, který pošle dotaz s uživatelským jménem a ID zařízení na PHP skript (android_cloud_control.php), který nejdříve ověří, že se jedná o oprávněného uživatele a pokud ano, tak PHP skript zavolá skript v PYTHONu (cloud.py viz. výše), který provede změnu.

Zasuvka220Rele_22 Zasuvka220Rele_21

 

MainActivity.java

Notice

package cz.androidapk.teplota;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.regex.Pattern;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;

import cz.androidapk.teplota.R.id;

import android.accounts.Account;
import android.accounts.AccountManager;
import android.content.Context;
import android.os.Bundle;
import android.os.StrictMode;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.graphics.Typeface;
import android.provider.Settings;
import android.util.Log;
import android.util.Patterns;
import android.util.TypedValue;
import android.view.Window;
import android.view.WindowManager;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;
public class MainActivity extends Activity {
String resultStatusCloud = „“;
ImageView statusImage;
String UserAccountEmail;
String AndroidID;
ToggleButton toggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
statusImage = (ImageView) findViewById(id.imageView);
StrictMode.enableDefaults();
getData();
}
public void getData(){
StatusCloud();
UserAccountEmail = GetUserAccount();
AndroidID = GetAndroidID();
CloudControl();
}

public void StatusCloud(){
//status cloud
InputStream isr = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(„http://localhost/android_cloud.php“);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
isr = entity.getContent();
}catch(Exception e) {
Log.e(„log_tag“,“Error on HTTP connection “ + e.toString());
resultView.setText(„Couldnt connect to HTTP“);
}

try{
BufferedReader reader = new BufferedReader(new InputStreamReader(isr,“iso-8859-1″), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null){
sb.append(line + „\n“);
}
isr.close();
resultStatusCloud = sb.toString();
}catch(Exception e){
Log.e(„log_tag“,“Error converting result „+ e.toString());
}
//parse json data
try{
;
Log.e(„log_tag“, resultStatusCloud);

if(resultStatusCloud.equals(„stopped\n“)){
statusImage.setBackgroundResource(R.drawable.red_on_64);
}else if(resultStatusCloud.equals(„running\n“)){
statusImage.setBackgroundResource(R.drawable.green_on_64);
}else{
statusImage.setBackgroundResource(R.drawable.white_on_64);
}

}catch (Exception e){
Log.e(„log_tag“, „Error Parsing data „+ e.toString());
}

}

public String GetUserAccount() {
Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+

Account[] accounts = AccountManager.get(this).getAccountsByType(„com.google“);
String possibleEmail = null;
for (Account account : accounts) {
if (emailPattern.matcher(account.name).matches()) {
possibleEmail = account.name;
//Log.e(„log_tag“,possibleEmail);
}
}
return possibleEmail;
}

public String GetAndroidID(){
String android_id = Settings.Secure.getString(this.getContentResolver(),
Settings.Secure.ANDROID_ID);
// Log.e(„log_tag“,android_id);
return android_id;
}

public void CloudControl(){
toggle = (ToggleButton) findViewById(id.toggleButton);
if (resultStatusCloud==“stopped“){
toggle.setChecked(false);
}else if (resultStatusCloud==“running“){
toggle.setChecked(true);
}

toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
InputStream isr = null;
String resultControlCloud;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(„http://localhost/android_cloud_control.php“);
//add your data
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair(„username“,UserAccountEmail));
nameValuePairs.add(new BasicNameValuePair(„password“,AndroidID));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
isr = entity.getContent();
}catch(Exception e) {
Log.e(„log_tag“,“Error on HTTP connection “ + e.toString());
resultView.setText(„Couldnt connect to HTTP“);
}Log.e(„log_tag“,“isChecked – true“);

try{
BufferedReader reader = new BufferedReader(new InputStreamReader(isr,“iso-8859-1″), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null){
sb.append(line + „\n“);
}
isr.close();
resultControlCloud = sb.toString();
Log.e(„log_tag“,resultControlCloud);

if(resultControlCloud.equals(„error\n“)){
toggle.setChecked(false);
Context context = getApplicationContext();
CharSequence text = „Tak to ti neprojde :) „;

int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}

}catch(Exception e) {
Log.e(„log_tag“, „Error converting result “ + e.toString());
}

getData();
} else {
InputStream isr = null;
String resultControlCloud;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(„http://localhost/android_cloud_control.php“);
//add your data
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair(„username“,UserAccountEmail));
nameValuePairs.add(new BasicNameValuePair(„password“,AndroidID));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
isr = entity.getContent();
}catch(Exception e) {
Log.e(„log_tag“,“Error on HTTP connection “ + e.toString());
resultView.setText(„Couldnt connect to HTTP“);
}Log.e(„log_tag“,“isChecked – else“);

try{
BufferedReader reader = new BufferedReader(new InputStreamReader(isr,“iso-8859-1″), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null){
sb.append(line + „\n“);
}
isr.close();
resultControlCloud = sb.toString();
Log.e(„log_tag“,resultControlCloud);

if(resultControlCloud.equals(„error\n“)){
toggle.setChecked(true);

Context context = getApplicationContext();
CharSequence text = „Tak to ti neprojde :) „;

int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();

}

}catch(Exception e) {
Log.e(„log_tag“, „Error converting result “ + e.toString());
}
getData();

}
}
});
}
}

android_cloud.php

Notice

<?php
// Path to the python script – either FULL path or relative to PHP script
$pythonScript = ‚status.py';

// Path to python executable – either FULL path or relative to PHP script
$pythonExec = ‚/var/www/';

// Check the file exists and PHP has permission to execute it
clearstatcache();
if (!file_exists($pythonExec)) {
exit(„The python executable ‚$pythonExec‘ does not exist!“);
}
if (!is_executable($pythonExec)) {
exit((„The python executable ‚$pythonExec‘ is not executable!“));
}
if (!file_exists($pythonScript)) {
exit(„The python script file ‚$pythonScript‘ does not exist!“);
}

// Execute it, and redirect STDERR to STDOUT so we can see error messages as well
exec(„echo ‚heslo‘ | sudo -S python \“$pythonExec\“\“$pythonScript\“ 2>&1″, $output);
// Show the output of the script
print_r($output[0]);
?>

 

android_cloud_control.php

Notice

<?php
$username = $_POST[‚username‘];
$password = $_POST[‚password‘];
if($username == „xxxxx@gmail.com“ && $password == „xxxxxxxxxxxxx“) {
// Path to the python script – either FULL path or relative to PHP script
$pythonScript = ‚cloud.py';

// Path to python executable – either FULL path or relative to PHP script
$pythonExec = ‚/var/www/';

// Check the file exists and PHP has permission to execute it
clearstatcache();
if (!file_exists($pythonExec)) {
exit(„The python executable ‚$pythonExec‘ does not exist!“);
}
if (!is_executable($pythonExec)) {
exit((„The python executable ‚$pythonExec‘ is not executable!“));
}
if (!file_exists($pythonScript)) {
exit(„The python script file ‚$pythonScript‘ does not exist!“);
}

// Execute it, and redirect STDERR to STDOUT so we can see error messages as $
exec(„echo ‚heslo‘ | sudo -S python \“$pythonExec\“\“$pythonScript\“ 2>&1″, $output);
// Show the output of the script
print_r($output[0]);
}
else {
echo „error“;
// echo $username;
}
?>

1. OSMC – Instalace OSMC (Open Source Media Center) na SD kartu z Windows

$
0
0

0_OSMCOSMC je zkratka pro Open Source Media Center, který je zcela zdarma distribuován pod licencÍ GNU GPLv2 – úprava a šíření není omezeno, výjimka je šíření za poplatek. Autorem OSMC je Sam Nazarko (který stál za vývojem RaspBMC)

 

 

Postup instalace image na SD kartu z prostředí Windows na Raspberry Pi 2 B:

Instalace probíhá přes grafického klienta. (lze instalovat ze tří prostředí – Windows, Linux i Mac OS X)
Momentálně jsou dvě možnosti v instalátoru a to Raspberry Pi a Raspberry Pi 2.

1. stáhnout instalátor pro windows ze stránek https://osmc.tv/ a nainstalovat

1_OSMC_download

2_OSMC_windows

3_OSMC_windows_installer

2. stáhnout image OSCM ze stránek https://osmc.tv/

4_OSMC_Image_download

5_OSMC_Image_download

6_OSMC_Image_download

3. spustíme stažený instalátor a nainstalujeme na SD kartu

zvolíme jazyk a na jaké zařízením bude instalováno

zvolíme jazyk a na jaké zařízení bude instalováno

zde zaškrtnout a vybrat stažený image na disku

zde zaškrtnout a vybrat stažený image na disku

vybrat místo instalace -> SD

vybrat místo instalace -> SD

nastavit, přes co se bude OSMC připojovat k síti -> kabelem

nastavit, přes co se bude OSMC připojovat k síti -> kabelem

označit SD kartu

označit SD kartu

zaškrtnout souhlas s licenčníma podmínkama

zaškrtnout souhlas s licenčními podmínkami

potvrdit a tím začne instalace na SD kartu

potvrdit a tím začne instalace na SD kartu

instalace

instalace

dokončení instalace

dokončení instalace

 

4. nyní již můžeme vložit SD kartu do Raspberry Pi 2 B k prvnímu spuštění, kde dojde k doinstalovaní

průběh instalace při prvním spuštění

průběh instalace při prvním spuštění

po instalaci pro restartu

po instalaci po restartu

5. Raspbian – Změna SSH portu

$
0
0
 

0.SSH_logo

 

pro změnu defaultně nastaveného SSH portu je potřeba změnit nastavení konfiguračního souboru sshd_config za pomocí například NANO editoru

 

 

 

pokud nemáte nainstalováno NANO editor, tak lze udělat tímto příkazem

Notice

sudo apt-get install nano

 

1. otevřít konfigurační soubor pomocí NANO editoru

Notice

sudo nano /etc/ssh/sshd_config


 

2. na řádku, kde je nastaven port 22, můžeme změnit například na 4200

SSH_zmena

uzavřít a uložit soubor (CTRL+x a pak “y” a enter)
 

3. restart SSH servisu

Notice

sudo service ssh restart


 

4. pokud máte veřejnou IP a chcete se přes putty připojovat přímo i internetu, musí se přidat přesměrování portu v routru na IP vašeho Pi v síti

SSH_zmena

 

5. Raspbian – Minecraft Server (Raspberry Pi 2)

$
0
0
 

Minecraft

 

Nový Raspberry Pi 2 má dvojnásobnou RAM a  více výpočetního výkonu, takže je možnost si vytvořit svůj vlastní Minecraft server. Určitě by si to zasloužilo ještě více RAM a výkonu, ale v rámci možností se to dá vyladit a hrát.

 

 

 

1. Vytvoření složky pro Minecraft server

Notice


mkdir ~/MinecraftServer
cd ~/MinecraftServer

2. Stáhnutí 1.8.1 vanilla Minecraft serveru (soubor typu jar)

Notice


wget https://s3.amazonaws.com/Minecraft.Download/versions/1.8.1/minecraft_server.1.8.1.jar

3. Vytvoření skriptu pro spu3tění serveru (soubor typu jar)

Notice


sudo nano start.sh

vložení tohoto příkazu pro spuštění serveru

Notice


java -Xmx1024M -Xms512M -jar minecraft_server.1.8.1.jar nogui

uzavřít a uložit soubor (CTRL+x a pak “y” a enter)

4. Vytvoření spouštěcího skriptu:

Notice


chmod +x start.sh

5. Spuštění serveru

Notice


./start.sh

Měli byste obdržet zprávu s žádostí o přijetí EULA.

6. Přijměte EULA a otevřete soubor eula.txt

Notice


sudo nano eula.txt

změna

Notice

z

eula=false

na

eula=true


uzavřít a uložit soubor (CTRL+x a pak “y” a enter)

7. Spuštění serveru

Notice


./start.sh

 

 

Při prvním spuštění serveru to bude chvíli trvat než se vytvoří nový svět a pak to bude již rychlejší při dalším spuštění. Po naběhnutí serveru by se mělo dát připojit přes klienta Minecraftu na jiném PC. Po kliknutí na více hráčů(Multiplayer), dále kliknout na přidání serveru(Add server) a pak se vyplní IP adresa vašeho RaspberryPI. Pokud máte k dispozici veřejnou IP a chcete využít pro hrání přes internet, tak je nutné na routru nastavit přesměrovani na adresu RaspbberyPi a daný port, který je nastaveny v serveru Minecraftu.

Můžete vypnout server zadáním příkazu “stop” v příkazovém okně.

Po chvíli hraní je jasné, že se hra občas kouše, ale dá se vyřešit snížením viditelné vzdálenosti v nastavení serveru, pak to poběží svižněji.

Notice


sudo nano server.properties

Změna:

Notice

z

view-distance = 10

na

view-distance = 5

uzavřít a uložit soubor (CTRL+x a pak “y” a enter)

Změny se projeví až po restartu Minecraft serveru.

 

Určitě by se dalo vyladit výkon ještě lépe. Pokud se někomu podaří, tak může vložit do komentářů níže

4. Monitorování vlhkosti půdy pomocí Raspberry Pi v domácnosti

$
0
0
 

VlhkostniSenzor_0Další možností jak využít Raspberry Pi v domácnosti je monitorování vlhkosti půdy v květináčích. Sledování poté může být zobrazeno přímo v konzoli (které je popsáno níže) nebo posláním mailu (když některé čidlo zjistí, že je hodnota pod určitou hodnotu, tak pošle email, kde bude upozornění, který konkrétní květináč je potřeba zalít), popřípadě v android zařízením, webu,… Abychom mohli toto uskutečnit, tak je zapotřebí koupit alespoň jedno vlhkostní čidlo a jeden integrovaný obvod MCP3008, který převádí analogový signál(lze napojit až 8 zařízení)  z vlhkostního čidla na digitální do RPi. (čidlo které je použito má i digitální výstup, ale pro oddělení je použit právě integrovaný obvod)

 

1. Součástky a zapojení

 

součástky

 

zapojení

VlhkostniSenzor_10

 

foto

DSCN6180DSCN6181DSCN6182DSCN6183DSCN6184DSCN6185DSCN6189DSCN6188


DSCN6186

 

 

 

2. Nainstalování a nastavení Pi

po nainstalovaní rasbianu udělat update a ugrade

 

nainstalovat  git, python pip a python dev

 

stáhnout a nainstalovat py-spidev

 

vytvořit složku pro python skripty napřiklad py

 

povolit SPI v základním nastavení systému


VlhkostniSenzor_1 VlhkostniSenzor_2

VlhkostniSenzor_3 VlhkostniSenzor_4

VlhkostniSenzor_5 VlhkostniSenzor_6

VlhkostniSenzor_7

a restart

 

kontrola, zda je nastaveno v pořadku

VlhkostniSenzor_8

 

 

3. Základní test + testovací skript(zobrazení v konzoli)

 

vytvořit si pomocnou knihovnu pro integrovaný obvod MCP3008


uzavřít a uložit soubor (CTRL+x a pak “y” a enter)

 

základní test v pythonu (načtení hodnoty s čidla)



428

 

vytvoření skriptu, který zobrazuje aktuální hodnotu

 

spuštění skriptu pro zjištění vlhkosti

VlhkostniSenzor_9

 


7. Raspbian – Instalace poslední verze webového prohlížeče Chromium 45(RASPBIAN JESSIE na Raspberry Pi 2)

$
0
0
 

Chromium_0Instalace webového prohlížeče Chromium v repozitářích pro raspberry pi jsou již zastaralé verze a není plně funkční a je potřeba udělat ruční instalaci. Po ruční instalaci se nemusí v zástupcích vytvořit ikona pro rychlé spuštění a je potřeba vytvořit na ploše zástupce manuálně.

 

 

Postup instalace poslední verze prohlížeče Chromium na RPi 2:

Instalace

1. spustit terminál a zadat:

Chromium_1

2.  vytvoření zástupce na ploše pro spuštění

pravé tlačítko myši -> vytvořit nový -> prázdný soubor

Chromium_2

vložit název souboru Chromium.desktop

Chromium_3

tím se vytvoří soubor, který pak z editujeme

Chromium_4

pravé tlačítko myši nad souborem – Text Editor

Chromium_5

vložit tento text

Chromium_6

uložit

Chromium_7

Chromium_8

8. Raspbian – start/stop GUI z příkazové řádky

$
0
0
 

 StartStop_1

 

start/stop GUI

 

 

START

Pokud je nastaveno RPi aby při startu naběhlo do příkazové řádky, tak spuštění do GUI se udělá jednoduchým příkazem

 

STOP

Pro ukončení z GUI si můžeme vytvořit nový příkaz a to stopx. 

nastavit cestu na

vytvořit nový soubor

vložit tento text poté uložit (CTRL+x a pak ENTER)

vytvořit spustitelný soubor

nyní je již vše hotové a pro ukončení GUI stačí zadat

 

 

 

Viewing all 17 articles
Browse latest View live