Raspberry Pi: Difference between revisions

From Omnia
Jump to navigation Jump to search
 
(6 intermediate revisions by the same user not shown)
Line 3,607: Line 3,607:


  vcgencmd get_throttled
  vcgencmd get_throttled
<pre>
$ vcgencmd get_throttled
throttled=0x50000
$ vcgencmd get_throttled
throttled=0x50005
1110000000000000010
|||            |||_ under-voltage
|||            ||_ currently throttled
|||            |_ arm frequency capped
|||_ under-voltage has occurred since last reboot
||_ throttling has occurred since last reboot
|_ arm frequency capped has occurred since last reboot
</pre>
-
<pre>
| Bit | Meaning |
|:---:|---------|
| 0 | Under-voltage detected |
| 1 | Arm frequency capped |
| 2 | Currently throttled |
| 3 | Soft temperature limit active |
| 16 | Under-voltage has occurred |
| 17 | Arm frequency capped has occurred |
| 18 | Throttling has occurred |
| 19 | Soft temperature limit has occurred
</pre>
The bits represent:
throttled=0x50000
0101 0000 0000 0000 0000
throttled=0x50005
0101 0000 0000 0000 0101
bits 0 & 16 - Under-voltage detected (has occured)
bits 2 & 18 - Currently throttled (has occured)


-
-
Line 3,624: Line 3,666:
-
-


root@mypi:~# vcgencmd get_throttled
root@mypi:~# vcgencmd get_throttled
throttled=0x0
throttled=0x0


This means it has '''never throttled''' (since boot).
This means it has '''never throttled''' (since boot).
Line 3,631: Line 3,673:
-
-


$ vcgencmd get_throttled
$ vcgencmd get_throttled
throttled=0x50005
throttled=0x50005




Line 3,680: Line 3,722:


https://elinux.org/images/thumb/d/d1/RPI_Test_Points.JPG/400px-RPI_Test_Points.JPG
https://elinux.org/images/thumb/d/d1/RPI_Test_Points.JPG/400px-RPI_Test_Points.JPG
=== Ignore Under Voltage Warnings ===
https://github.com/raspberrypi/documentation/pull/3064/files
"If the power supply to the Raspberry Pi drops below 4.63V (±5%), the following icon is displayed."
https://www.raspberrypi.com/documentation/computers/legacy_config_txt.html#avoid_warnings
avoid_warnings=2 allows turbo mode even when low-voltage is present.
If you want to live ignorantly, you can disable the on-screen warnings: <ref>https://forums.raspberrypi.com/viewtopic.php?f=63&t=147781&start=50#p972790</ref>
/boot/config.txt
  avoid_warnings=1
# still get throttled, but no more on-screen warnings (still displays to console)
$ vcgencmd get_throttled
throttled=0x50005
If you want to live dangerously, you can disable the warnings, and disable throttling:
/boot/config.txt
  avoid_warnings=2
# throttled will give something differently
$ vcgencmd get_throttled
throttled=0x70000
=== Turbo Mode ===
force_turbo=1
disable_auto_turbo=1
On Raspberry Pi 2 and 3, setting this flag will disable the GPU from moving into turbo mode, which it can do under particular loads.
Setting any overclocking parameters to values other than those used by raspi-config may set a permanent bit within the SoC. This makes it possible to detect that your Raspberry Pi was once overclocked. The overclock bit sets when force_turbo is set to 1 and any of the over_voltage_* options are set to a value of more than 0. See the blog post on Turbo mode for more information. - https://www.raspberrypi.com/news/introducing-turbo-mode-up-to-50-more-performance-for-free/
force_turbo
Forces turbo mode frequencies even when the ARM cores are not busy. Enabling this may set the warranty bit if over_voltage_* is also set.
=== Power Save Mode ===
echo powersave | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
and the higher one with "performance" instead of "powersave"
<ref>https://forums.raspberrypi.com/viewtopic.php?t=152549</ref>


== Monitoring Power and Thermal Issues ==
== Monitoring Power and Thermal Issues ==

Latest revision as of 09:10, 31 October 2024

Raspberry Pi

Raspberry Pi - http://www.raspberrypi.org/



Power

Power is provided through a Micro USB port with a 700 mA (3.5 W) (Model B) / 300 mA (1.5 W) (Model A) requirement

RPi Hardware - eLinux.org - http://elinux.org/RPi_Hardware#Power

I highly recommend at least a 1.2A power supply (if using wireless or anything more than keyboard/mouse)!

Power Test Points

How Can I tell if the power supply is inadequate? - http://elinux.org/RPi_Hardware#Power

"If you think you have a problem with your power supply, it is a good idea to check the actual voltage on the Raspberry Pi circuit board. Two test points labelled TP1 and TP2 are provided on the circuit board to facilitate voltage measurements.
Use a multimeter which is set to the range 20 volts DC (or 20v =). You should see a voltage between 4.75 and 5.25 volts. Anything outside this range indicates that you have a problem with your power supply or your power cable, or the input polyfuse F3. Anything inside, but close to the limits, of this range may indicate a problem. "

Raspberry Pi - How to check your power supplys voltage - YouTube - https://www.youtube.com/watch?v=W3nH-Bh1Q0Q

  • Use Multi Meter to check TP1 to TP2 Voltage. 4.75 V - 5.25 V is a valid range.

Power Consumption

"According to Kill-A-Watt meter, power consumption over 40 hours was 0.09 kWh, or 2.3 Watts per hour." [1]

"about .20 Amps at 12.5V" "Bottom line. Pi uses about 2 watts at idle." [2]

How To Tell Model

Newer versions:

$ cat /proc/device-tree/model
$ cat /sys/firmware/devicetree/base/model
Raspberry Pi 3 Model B Rev 1.2

--

cat /proc/cpuinfo | grep 'Revision' | awk '{print $3}' | sed 's/^1000//'
# or
awk '/^Revision/ {sub("^1000", "", $3); print $3}' /proc/cpuinfo
Revision	Release Date	Model		PCB Revision	Memory	Notes
Beta		Q1 2012		B (Beta)	?	256 MB	Beta Board
0002		Q1 2012		B		1.0	256 MB	
0003		Q3 2012		B (ECN0001)	1.0	256 MB	Fuses mod and D14 removed
0004		Q3 2012		B		2.0	256 MB	(Mfg by Sony)
0005		Q4 2012		B		2.0	256 MB	(Mfg by Qisda)
0006		Q4 2012		B		2.0	256 MB	(Mfg by Egoman)
0007		Q1 2013		A		2.0	256 MB	(Mfg by Egoman)
0008		Q1 2013		A		2.0	256 MB	(Mfg by Sony)
0009		Q1 2013		A		2.0	256 MB	(Mfg by Qisda)
000d		Q4 2012		B		2.0	512 MB	(Mfg by Egoman)
000e		Q4 2012		B		2.0	512 MB	(Mfg by Sony)
000f		Q4 2012		B		2.0	512 MB	(Mfg by Qisda)
0010		Q3 2014		B+		1.0	512 MB	(Mfg by Sony)
0011		Q2 2014		Compute Module 1 1.0	512 MB	(Mfg by Sony)
0012		Q4 2014		A+		1.1	256 MB	(Mfg by Sony)
0013		Q1 2015		B+		1.2	512 MB	(Mfg by Embest)
0014		Q2 2014		Compute Module 1 1.0	512 MB	(Mfg by Embest)
0015		?		A+		1.1	256 MB / 512 MB	(Mfg by Embest)
a01040		Unknown		2 Model B	1.0	1 GB	(Mfg by Sony)
a01041		Q1 2015		2 Model B	1.1	1 GB	(Mfg by Sony)
a21041		Q1 2015		2 Model B	1.1	1 GB	(Mfg by Embest)
a22042		Q3 2016		2 Model B 	1.2	1 GB	(Mfg by Embest)
900021		Q3 2016		A+		1.1	512 MB	(Mfg by Sony)
900032		Q2 2016?	B+		1.2	512 MB	(Mfg by Sony)
900092		Q4 2015		Zero		1.2	512 MB	(Mfg by Sony)
900093		Q2 2016		Zero		1.3	512 MB	(Mfg by Sony)
920093		Q4 2016?	Zero		1.3	512 MB	(Mfg by Embest)
9000c1		Q1 2017		Zero W		1.1	512 MB	(Mfg by Sony)
a02082		Q1 2016		3 Model B	1.2	1 GB	(Mfg by Sony)
a020a0		Q1 2017		Compute Module 3 1.0	1 GB	(Mfg by Sony)
a22082		Q1 2016		3 Model B	1.2	1 GB	(Mfg by Embest)
a32082		Q4 2016		3 Model B	1.2	1 GB	(Mfg by Sony Japan)
a020d3		Q1 2018		3 Model B+	1.3	1 GB	(Mfg by Sony)
9020e0		Q4 2018		3 Model A+	1.0	512 MB	(Mfg by Sony)

Ref: RPi HardwareHistory - eLinux.org - https://elinux.org/RPi_HardwareHistory

Model A vs B

Model B includes additionally the following:

  • 512 MB RAM (vs 256 MB RAM)
  • 2 USB ports (vs 1)
  • Ethernet
  • Higher power requirement of 700 mA (vs 300 mA)

Model B Rev 1 vs Rev 2

How do you find out if you have a rev 1 or 2 board? Is it worth upgrading? [3]

The rev 2 boards have 2 mounting holes drilled through the board. The rev 1 boards dont have any mounting holes. That's the basic visual check you can perform to check which version you have

Model B Rev 1 came in only 256 MB of RAM. Model B Rev 2 comes in both 256 MB and 512 MB. If you have 512 MB of RAM, it is a Rev 2 board!

Model B Rev 2 Board:

# grep Revision /proc/cpuinfo
Revision        : 000e

Model B Rev 2 (HW Rev 000e): Rev2 Model B, 512MB RAM, Ethernet, two USB sockets, five LEDs, mounting holes, Pin3=GPIO1, Pin5=GPIO2, Pin13=GPIO27, 12C-1, 8 extra IO pads (P5) [4]

Full output of a Model B Rev 2 Board

# cat /proc/cpuinfo
Processor       : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 697.95
Features        : swp half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2708
Revision        : 000e
Serial          : 00000000b4ae7143

References:

Purchase

Amazon:

Spark Fun:

Group: Raspberry Pi - element14 - http://www.element14.com/community/groups/raspberry-pi

Here are a few places to try that often have a few in stock: [5]

  • Adafruit (the kit is almost always in stock if the singular unit isn't)
  • Amazon (almost always in stock, but through third parties at a premium)
  • Allied Electronics (only available in North America)

GPIO

GPIOs.png

RPi Low-level peripherals - eLinux.org - http://elinux.org/RPi_Low-level_peripherals

"In addition to the familiar USB, Ethernet and HDMI ports, the R-Pi offers lower-level interfaces intended to connect more directly with chips and subsystem modules. These GPIO (general purpose I/O) signals on the 2x13 header pins include SPI, I2C, serial UART, 3V3 and 5V power. These interfaces are not "plug and play" and require care to avoid miswiring. The pins use a 3V3 logic level and are not tolerant of 5V levels, such as you might find on a 5V powered Arduino. CSI (camera serial interface) can be used to connect the 5 MP camera available. Not yet software-enabled is the flex cable connectors with DSI (display serial interface) and a serial link inside the HDMI connector called CEC. (consumer electronics control) "

-

RPi_P1_header.png

"General Purpose Input/Output (a.k.a. GPIO) is a generic pin on a chip whose behavior (including whether it is an input or output pin) can be controlled (programmed) through software. " [6]

GPIO Installation

apt-get install pigpio raspi-gpio wiringpi
lsmod | grep -i gpio
# modprobe gpio
modprobe bcm2835_gpiomem

Command Line

gpio readall
gpio mode [pin] [mode]  # mode = in or out
gpio read [pin]  # returns: 0 or 1
gpio write [pin] [value]  # value = 0 or 1

Programming

http://elinux.org/RPi_Low-level_peripherals

import RPi.GPIO as GPIO

# use P1 header pin numbering convention
GPIO.setmode(GPIO.BOARD)

# Set up the GPIO channels - one input and one output
GPIO.setup(11, GPIO.IN)
GPIO.setup(12, GPIO.OUT)

# Input from pin 11
input_value = GPIO.input(11)

# Output to pin 12
GPIO.output(12, GPIO.HIGH)

# The same script as above but using BCM GPIO 00..nn numbers
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN)
GPIO.setup(18, GPIO.OUT)
input_value = GPIO.input(17)
GPIO.output(18, GPIO.HIGH)

GPIO.cleanup()

Output

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
try:
  GPIO.setup(18, GPIO.OUT)
  GPIO.output(18, GPIO.HIGH)
  time.sleep(1)
  GPIO.output(18, GPIO.LOW)
finally:
  GPIO.cleanup()

Input

#!/usr/bin/env python

import sys
import time

import RPi.GPIO as GPIO

pin = 25

GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.IN)

try:
  while True:
    input_value = GPIO.input(pin)
    if input_value:
      sys.stdout.write('-')
    else:
      sys.stdout.write('.')
    sys.stdout.flush()
    time.sleep(.01)
finally:
  GPIO.cleanup()

EGHS-PullUpDownSwitchProtected.jpg

  • Pull Up (top) - default High
  • Pull Down (bottom) - default Low

"When a GPIO pin is set as an input it is “floating” and has no defined voltage level. For us to be able to reliably detect whether the input is high or low we need to tie it so that it is always connected and either reads high or low.

To tie the pin we connect either a Pull Up or Pull Down resistor. A Pull down resistor connects the pin to ground through a large resistor, this means that when the switch is open there is a path to ground and so it will read low. When the switch is pressed (with the other side connected to 3.3V) there is a lower resistance path to high and so the pin will read high. The large (10kΩ) resistor ensures that only a little current is drawn when the switch is pressed.

Setting up a circuit like this means that we will be able to take reliable readings from a switch, however we could still damage the pins if they are accidentally set to an output. If we drive it low the output is connected directly to ground. Pushing the button will then create a short circuit between 3.3V and ground! To make this safer we put in a current limiting resistor (1kΩ will do) to make sure the Pi can handle the current drawn." (Buttons and Switches - Physical Computing with Raspberry Pi)

References:

--

Inputs - raspberry-gpio-python - How to use inputs in RPi.GPIO - Python library for GPIO access on a Raspberry Pi - Google Project Hosting - http://code.google.com/p/raspberry-gpio-python/wiki/Inputs

Pull up / Pull down resistors

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
while GPIO.input(channel) == GPIO.LOW:
   time.sleep(0.01)  # wait 10 ms to give CPU chance to do other things

-

Overview | Adafruit's Raspberry Pi Lesson 4. GPIO Setup | Adafruit Learning System - http://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/overview

"One of the great things about the Raspberry Pi is that it has a GPIO connector to which you can attach external hardware."

-

GPIO Electrical Specifications, Raspberry Pi Input and Output Pin Voltage and Current Capability - http://www.mosaic-industries.com/embedded-systems/microcontroller-projects/raspberry-pi/gpio-pin-electrical-specifications

raspberry-pi-circuit-gpio-input-pins.png

-

Computer Laboratory – Raspberry Pi: Section 2: GPIO - http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/turing-machine/two.html

-

YouTube Video

What are the input voltage thresholds for the Raspberry Pi's GPIO pins? - YouTube - http://www.youtube.com/watch?v=Wr49ia3oID4

LOW: 0V - 1.19V
HIGH: 1.34V - 3.30V

Cute Qubit Online - http://cutequbit.zapto.org/

GPIO Interrupts

Check if your version of Python GPIO library has support:

sudo python
import RPi.GPIO as GPIO
GPIO.VERSION
# need 0.5.1 or higher

Check for falling edge:

#!/usr/bin/env python

import sys
import time

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.IN)

try:
  while True:
    # RISING, FALLING or BOTH
    GPIO.wait_for_edge(25, GPIO.FALLING)
    print "Change detected"
finally:
  GPIO.cleanup()

Interrupts and Edge detection - To avoid missing a button press while your program is busy doing something else, there are two ways to get round this:

  • the wait_for_edge() function
  • the event_detected() function
  • a threaded callback function that is run when an edge is detected

wait_for_edge() function:

GPIO.wait_for_edge(channel, GPIO.RISING)

event_detected() function

GPIO.add_event_detect(channel, GPIO.RISING)  # add rising edge detection on a channel
do_something()
if GPIO.event_detected(channel):
    print('Button pressed')
# remove event, if needed
GPIO.remove_event_detect(channel)

Threaded callbacks:

def my_callback(channel):
  ...

GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)

References:

---

MagPi - Interrupt Test23 - http://ryniker.ods.org/raspberrypi/MagPi/interrupt_test23.py

MagPi - GPIO Interrupts - http://ryniker.ods.org/raspberrypi/MagPi/GPIO_interrupts

#!/usr/bin/python3

# Test interrupts.

import select, time, sys

pin_base = '/sys/class/gpio/gpio23/'

def write_once(path, value):
    f = open(path, 'w')
    f.write(value)
    f.close()
    return


f = open(pin_base + 'value', 'r')

write_once(pin_base + 'direction', 'in')
write_once(pin_base + 'edge', 'both')

po = select.poll()
po.register(f, select.POLLPRI)

state_last = f.read(1)
t1 = time.time()
sys.stdout.write('Initial pin value = {}\n'.format(repr(state_last)))

while 1:
    events = po.poll(60000)
    t2 = time.time()
    f.seek(0)
    state_last = f.read(1)
    if len(events) == 0:
        sys.stdout.write('  timeout  delta = {:8.4f} seconds\n'.format(t2 - t1))
    else:
        sys.stdout.write('value = {}  delta ={:8.4f}\n'.format(state_last, t2 - t1))
        t1 = t2

GPIO Permissions

MagPi - gpio_control.c - http://ryniker.ods.org/raspberrypi/MagPi/gpio_control.c

Switch debounce

You may notice that the callbacks are called more than once for each button press. This is as a result of what is known as 'switch bounce'. There are two ways of dealing with switch bounce:

  • add a 0.1uF capacitor across your switch.
  • software debouncing
  • a combination of both

GPIO Boot State

"The RPi is not setting the GPIO to output when first booted. It is turning on a pull down resistor for 740 milliseconds. I have used two 18K resistors ( 3v3 -> GPIO -> GND ) to look at exactly what is going on with the pins. Here is the trace. Blue line is 3v3 power, yellow line is GPIO line." [7]

-

"All the GPIO pins can be reconfigured to provide alternate functions, SPI, PWM, I²C and so. At reset only pins GPIO 14 & 15 are assigned to the alternate function UART, these two can be switched back to GPIO to provide a total of 17 GPIO pins[3]. Each of their functions and full details of how to access are detailed in the chipset datasheet."

So don't use GPIO 14 & 15 for sensitive tasks. (14 specifically has boot issues!)

RPi Low-level peripherals - eLinux.org - http://elinux.org/RPi_Low-level_peripherals

-

"I know you want to avoid resistors on the GPIO pins, but I don't know any other way around the issue, as most pins are inputs and are floating. I use a 10k resistor from each GPIO I am using to ground, before my other circuitry. By choosing the proper pins (Pins where MODE=IN and VALUE=LOW at boot. See the chart labeled "Rev 2 pin state at boot time" at the url below) and by adding the resistors, you are guaranteed a LOW at boot, and still are able to set the pins to a LOW or HIGH in software." - Raspberry Pi • View topic - GPIO random voltage upon boot - http://www.raspberrypi.org/phpBB3/viewtopic.php?f=26&t=47895

See also: - Raspberry Pi • View topic - GPIO Pin States a Boot time - Change in 3.6.11+ - http://www.raspberrypi.org/phpBB3/viewtopic.php?f=44&t=35321


<pre>
Rev 2 pin state at boot time:
+----------+-Rev2-+------+--------+------+-------+
| wiringPi | GPIO | Phys | Name   | Mode | Value |
+----------+------+------+--------+------+-------+
|      0   |  17  |  11  | GPIO 0 | IN   | Low   |
|      1   |  18  |  12  | GPIO 1 | IN   | Low   |
|      2   |  27  |  13  | GPIO 2 | IN   | Low   |
|      3   |  22  |  15  | GPIO 3 | IN   | Low   |
|      4   |  23  |  16  | GPIO 4 | IN   | Low   |
|      5   |  24  |  18  | GPIO 5 | IN   | Low   |
|      6   |  25  |  22  | GPIO 6 | IN   | Low   |
|      7   |   4  |   7  | GPIO 7 | IN   | Low   |
|      8   |   2  |   3  | SDA    | IN   | High  |
|      9   |   3  |   5  | SCL    | IN   | High  |
|     10   |   8  |  24  | CE0    | IN   | Low   |
|     11   |   7  |  26  | CE1    | IN   | Low   |
|     12   |  10  |  19  | MOSI   | IN   | Low   |
|     13   |   9  |  21  | MISO   | IN   | Low   |
|     14   |  11  |  23  | SCLK   | IN   | Low   |
|     15   |  14  |   8  | TxD    | ALT0 | High  |
|     16   |  15  |  10  | RxD    | ALT0 | High  |
|     17   |  28  |   3  | GPIO 8 | IN   | Low   |
|     18   |  29  |   4  | GPIO 9 | IN   | Low   |
|     19   |  30  |   5  | GPIO10 | IN   | Low   |
|     20   |  31  |   6  | GPIO11 | IN   | Low   |
+----------+------+------+--------+------+-------+

Onboard LED

Only the Green is controllable:

# off
echo 0 >/sys/class/leds/led0/brightness
# on
echo 1 >/sys/class/leds/led0/brightness
while true ; do echo 0 >/sys/class/leds/led0/brightness ; sleep .5 ;
echo 1 >/sys/class/leds/led0/brightness ; sleep .5 ; done

Blink the light (by me): (/usr/local/sbin/blink)

#!/bin/bash
echo "Blinking..."
trap "{ echo Exiting ; echo 0 >/sys/class/leds/led0/brightness ; exit 0 ; }" SIGINT SIGTERM
while true ; do
  echo -n "."
  # on
  echo 1 >/sys/class/leds/led0/brightness
  sleep .1
  # off
  echo 0 >/sys/class/leds/led0/brightness
  sleep .1
done

References:

IP Address

Add to /etc/rc.local: [8]

_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
  espeak "Welcome to Rasberry pi. My I.P. is $_IP. I repeat: $_IP"
else
  espeak "Welcome to Rasberry pi. No I.P. found."
fi

Onboard Audio and Sound

Setup device

lsmod | grep snd_bcm2835  # verify audio module loaded

Set device:

amixer info  # show devices
amixer controls  # show controls
  numid=2,iface=MIXER,name='Headphone Playback Switch'
  numid=1,iface=MIXER,name='Headphone Playback Volume'
#amixer cset numid=3 1  # force analog 3.5mm jack -- doesn't work?
amixer cset numid=3 1  # force analog 3.5mm jack -- doesn't work?

Set Volume:

# depending on device...
amixer   # show devices
amixer set PCM 80%  # set PCM volume to 80%
amixer set Headphone  # get values
amixer set Headphone 80%  # set Headphonevolume to 80%
amixer controls  # show controls
amixer cget name='Headphone Playback Volume'
   numid=1,iface=MIXER,name='Headphone Playback Volume'
     ; type=INTEGER,access=rw---R--,values=1,min=-10239,max=400,step=0
     : values=-1727
     | dBscale-min=-102.39dB,step=0.01dB,mute=1
amixer cset name='Headphone Playback Volume' 400  # set to max volume in db scale

Shell WAV:

wget http://www.freespecialeffects.co.uk/soundfx/sirens/police_s.wav
aplay police_s.wav

Shell MP3: (not amixer volume does affect this)

sudo apt-get -y install mpg321
wget http://www.freespecialeffects.co.uk/soundfx/household/bubbling_water_1.mp3
mpg321 bubbling_water_1.mp3
mpg321 -g 50 bubbling_water_1.mp3  # 50% volume (default is 100%)

Python MP3: [9]

import pygame
pygame.mixer.init()
pygame.mixer.music.load("myFile.wav")
pygame.mixer.music.play()

Text to audio:

apt-get install espeak
espeak "hello world"
espeak "hello world" 2> /dev/null
speak "someone going out the garage" -a 200 -p 20 -s 80

Quantum Bits » Project “Jarvis”: step two (speak to me) - [10]

""" /usr/bin/curl -A "Mozilla" 
"http://translate.google.com/translate_tts?tl=en_gb&ie="UTF-8"&q='{msg}' > google.mp3 """.format(msg=msg)

References:

Google Text to Speech

Google TTS - "Google Text-To-Speech is a private REST API. Getting results is less straightforward but noneless very easily manageable."

Get Google TTS through Python: (modified from [11])

cmd = """ /usr/bin/curl -A "Mozilla" 
  "http://translate.google.com/translate_tts?tl=en_gb&ie="UTF-8"&q='{msg}' > google.mp3 """.format(msg=msg)
os.system(cmd)

References:

Raspbian Installation

Raspbian Download - http://www.raspberrypi.org/downloads/

Write image to SD card:

wget http://downloads.raspberrypi.org/raspbian_latest
unzip 2014-01-07-wheezy-raspbian.zip
sudo dd if=2014-01-07-wheezy-raspbian.img of=/dev/sdh bs=1M

Win32 Disk Imager | SourceForge.net - http://sourceforge.net/projects/win32diskimager/

  • Win32DiskImager-0.9.5-install.exe (installer) or Win32DiskImager-0.9.5-binary.zip (binary)

Note: Ethernet with SSHD configured on by default

Boot Raspberry Pi and Configure:

## Login: pi : raspberry
sudo su -


## Configure Raspberry Pi
##    auto runs the first time you sudo to root, and it will reboot the Pi
raspi-config
# - Expand Filesystem
# - Change User Password (Optional)
# - Internaltionalisation Options - Change Locale - (uncheck "en_GB.UTF-8 UTF-8", check "en_US.*" (x3), and set "en_US.UTF-8" as default)
# - Internaltionalisation Options - Change Timezone - US - Mountain
# - Advanced Options - Hostname
# - Advanced Options - Memory Split - Set to 16 (for server) or 128 (for picamera)
# - Advanced Options - Update

reboot
# --- REBOOT --- #
# --- REBOOT --- #
# --- REBOOT --- #


sudo su -

passwd   # change root password


hostname [HOSTNAME]
hostname > /etc/hostname
# echo "[HOSTNAME]" > /etc/hostname
# hostname [HOSTNAME]
# hostname `cat /etc/hostname`
cat /etc/hostname
hostname HOSTNAME
echo $HOSTNAME > /etc/hostname


# Apply pseudo random number to change default hostid from '007f0101',
#   which is based on /etc/hosts entries
hostid
hostid > /etc/hostid.old
#echo $RANDOM > /etc/hostid
wget http://piregister.oeey.com/sethostid.txt -O /usr/local/sbin/sethostid
chmod u+x /usr/local/sbin/sethostid
sethostid
hostid

# set timezone
mv /etc/localtime /etc/localtime.original
ln -s /usr/share/zoneinfo/America/Denver /etc/localtime
date

#cp /etc/profile /etc/profile.original
#echo "" >> /etc/profile
#echo "export EDITOR=vim" >> /etc/profile
#export EDITOR=vim

cp ~/.bashrc ~/.bashrc.original
echo "" >> ~/.bashrc
echo "export EDITOR=vim" >> ~/.bashrc
export EDITOR=vim
echo "alias ls='ls --color'" >> ~/.bashrc
alias ls='ls --color'

apt-get update
apt-get -y install vim screen espeak mpg321 mercurial tree python-pip rsync wiringpi
apt-get -y upgrade

adduser kenneth  # this will also set the password
# --- PASSWORD --- #
# --- PASSWORD --- #
# --- PASSWORD --- #

# passwd kenneth  # set password
#visudo  # add to visudo
#  kenneth ALL=(ALL) NOPASSWD: ALL
# --- VISUDO --- #
# --- VISUDO --- #
# --- VISUDO --- #
echo "kenneth ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

cp /etc/motd /etc/motd.original
> /etc/motd


wget http://piregister.oeey.com/piserial.txt -O /usr/local/bin/piserial
chmod +x /usr/local/bin/piserial
piserial

wget http://piregister.oeey.com/piregister.txt -O /usr/local/bin/piregister
chmod +x /usr/local/bin/piregister
piregister

wget http://piregister.oeey.com/blink.txt -O /usr/local/sbin/blink
chmod +x /usr/local/sbin/blink
# blink


## ADD TO CRON:
echo "# m h  dom mon dow   command" > tmpcron
echo "@reboot   /usr/local/bin/piregister" >> tmpcron
echo "0 0 * * *   /usr/local/bin/piregister" >> tmpcron
#echo "*/10 * * * *  /usr/bin/logger -- \"-- MARK --\"" >> tmpcron
echo "0 * * * *  /usr/bin/logger -- \"-- MARK --\"" >> tmpcron
crontab tmpcron
# will be added as: /var/spool/cron/crontabs/root
rm -f tmpcron


#cp /etc/rc.local /etc/rc.local.original
#sed -i '/exit 0/d' /etc/rc.local
#echo "" >> /etc/rc.local
#echo "/usr/local/bin/piregister" >> /etc/rc.local
#echo "" >> /etc/rc.local
#echo "exit 0" >> /etc/rc.local


## WIRELESS (Optional)
cat > /etc/wpa_supplicant/wpa_supplicant.conf << "EOF"
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
# reading passphrase from stdin
network={
        ssid="toast"
        #psk="xxx"
        psk=8085
}
EOF
# ifdown --force wlan0
# ifup wlan0


# NFS
service rpcbind restart
update-rc.d rpcbind defaults
echo "prime:/pub      /pub            nfs     noauto        0 0" >> /etc/fstab
mkdir /pub
mount /pub


reboot
# --- REBOOT --- #
# --- REBOOT --- #
# --- REBOOT --- #


# Wireless should now be running


# SSH Key
ssh-keygen
# [enter] [enter] [enter]
ssh-copy-id kiloforce@oeey.com
ssh kiloforce@oeey.com 'pwd'

# Mercurial
# apt-get install mercurial
#hg clone ssh://kiloforce@oeey.com//opt/hg/pi /opt/pi-hg
#ln -sfn /opt/pi-hg /opt/hg
hg clone ssh://kiloforce@oeey.com//opt/hg/pi /opt/hg
ln -sfn /opt/pi-hg /hg
hg --cwd /opt/hg pull -u

#ln -sfn /opt/hg/common/vimrc /root/.vimrc
#ln -sfn /opt/hg/common/hgrc /root/.hgrc
#ln -sfn /opt/hg/common/piregister /usr/local/bin/piregister
#ln -sfn /opt/hg/common/piserial /usr/local/bin/piserial

cd /opt/hg
./rebuild common

./rebuild `hostname`

# System update
#apt-get update
#apt-get -y upgrade
#apt-get update ; apt-get -y upgrade ; apt-get -y dist-upgrade
apt-get update ; apt-get -y upgrade ; apt-get -y autoremove ; apt-get clean all

# reboot
reboot

RaspBMC Installation

Write image to SD card:

wget http://downloads.raspberrypi.org/raspbmc_latest
gzip -d raspbmc-2013-10-02.img.gz
sudo dd if=raspbmc-2013-10-02.img of=/dev/sdh bs=1M

Note: Ethernet with SSHD configured on by default

Boot Raspberry Pi

## WAIT FOREVER - it will go through several reboots and upgrades
## This will take a while...

Configure Raspberry Pi:

## Login: pi : raspberry
## INITIAL CONFIGURATION WILL PROCEED ON FIRST CONNECTION
## * Locale - en_US
## * Time - America / Mountain
## System will now reboot

sudo su -

## All of the expand filesystem, and other settings are done during the initial setup

passwd   # change root password


## Set hostname
hostname pi-wii
echo `hostname` > /etc/hostname


## RESTART SYSLOG
/etc/init.d/rsyslog restart


## This will take a while...
apt-get update
apt-get -y install vim screen espeak mpg321 curl alsa-utils wireless-tools wpasupplicant
apt-get autoremove


## Verify sound
wget http://www.freespecialeffects.co.uk/soundfx/sirens/police_s.wav
aplay police_s.wav
wget http://www.freespecialeffects.co.uk/soundfx/household/bubbling_water_1.mp3
mpg321 bubbling_water_1.mp3


# SETUP DEFAULT EDITOR
echo "" >> /etc/profile
echo "export EDITOR=vim" >> /etc/profile
export EDITOR=vim


adduser kenneth  # this will also set the password
# --- PASSWORD --- #
# --- PASSWORD --- #
# --- PASSWORD --- #


# passwd kenneth  # set password
visudo  # add to visudo  (note: need vim as EDITOR has been set)
  # --- VISUDO --- #
  # --- VISUDO --- #
  # --- VISUDO --- #
  kenneth ALL=(ALL) NOPASSWD: ALL


## clear message of the day
> /etc/motd


cat > /usr/local/bin/piserial << "EOF"
#!/bin/bash
cat /proc/cpuinfo | grep Serial | awk '{print $3'}
EOF
chmod +x /usr/local/bin/piserial
# test
piserial


cat > /usr/local/bin/piregister << "EOF"
#!/bin/bash
# cron: 0 0 * * *   /usr/local/bin/piregister
_IP=$(hostname -I | awk '{print $1}') || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
  HOSTNAME=`hostname`
  SERIAL=`/usr/local/bin/piserial`
  /usr/bin/curl http://pi.oeey.com/register/$SERIAL/$HOSTNAME/$_IP
  logger "Registered as http://pi.oeey.com/register/$SERIAL/$HOSTNAME/$_IP"
  #espeak "Welcome to Rasberry pi. My I.P. is $_IP. I repeat: $_IP"
  logger "Welcome to Rasberry pi. My I.P. is $_IP. I repeat: $_IP"
else
  #espeak "Welcome to Rasberry pi. No I.P. found."
  logger "Welcome to Rasberry pi. No I.P. found."
fi
EOF
chmod +x /usr/local/bin/piregister
# test
piregister


## ADD TO CRON:
echo "# m h  dom mon dow   command" > tmpcron
echo "0 0 * * *   /usr/local/bin/piregister" >> tmpcron
echo "*/10 * * * *  /usr/bin/logger -- \"-- MARK -- `date`\"" >> tmpcron
crontab tmpcron
rm -f tmpcron


## ADD TO BOOT
sed -i '/exit 0/d' /etc/rc.local
echo "" >> /etc/rc.local
echo "/usr/local/bin/piregister" >> /etc/rc.local
echo "" >> /etc/rc.local
echo "exit 0" >> /etc/rc.local


## Wireless: http://wireless.kernel.org/en/users/Documentation/iw
cat > /etc/wpa_supplicant/wpa_supplicant.conf << "EOF"
#ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
# reading passphrase from stdin
network={
        ssid="toast"
        #psk="MYPASSWORD"
        psk=8085564ae7b7ebaf397eb5eebfe5a1ec093f8b78aa00fadb9cf7f810742bba55
}
EOF

cp /etc/wpa_supplicant/functions.sh /etc/wpa_supplicant/functions.sh.bak
sed -i 's/nl80211,//g' /etc/wpa_supplicant/functions.sh

cat >> /etc/network/interfaces << "EOF"
auto wlan0
iface wlan0 inet dhcp
pre-up wpa_supplicant -D wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
post-down killall -q wpa_supplicant
EOF
# /sbin/wpa_supplicant -u -s -O /var/run/wpa_supplicant
# -u enable dbus,  -s log to syslog,  -O override ctrl_interface,  -B daemon,  -D driver,  -i interface

## ADD TO BOOT
sed -i '/exit 0/d' /etc/rc.local
echo "" >> /etc/rc.local
echo "/sbin/wpa_supplicant -D wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B" >> /etc/rc.local
echo "" >> /etc/rc.local
echo "exit 0" >> /etc/rc.local

ifdown --force wlan0
rm -f /var/run/wpa_supplicant/wlan0
modprobe -r 8192cu
#killall wpa_supplicant
for i in `pidof wpa_supplicant` ; do kill $i ; done
# wait a second

modprobe 8192cu
#ifup wlan0

for i in `pidof wpa_supplicant` ; do kill $i ; done ; /sbin/wpa_supplicant -D wext -i wlan0 \
   -c /etc/wpa_supplicant/wpa_supplicant.conf -B

iwconfig
iwlist wlan0 scan
iwconfig wlan0 mode Managed
iwconfig wlan0 essid toast


# NFS
service rpcbind restart
update-rc.d rpcbind defaults
echo "prime:/pub      /pub            nfs     defaults        0 0" >> /etc/fstab
mkdir /pub
mount /pub


reboot
# --- REBOOT --- #
# --- REBOOT --- #
# --- REBOOT --- #


# Wireless should now be running

References:

OpenELEC Installation

OpenELEC Mediacenter - http://openelec.tv/

OpenELEC Download - http://openelec.tv/get-openelec/download

Installing OpenELEC on Raspberry Pi - OpenELEC - http://wiki.openelec.tv/index.php?title=Installing_OpenELEC_on_Raspberry_Pi

Downloads:

Write image to SD card:

yum install dosfstools e4fsprogs

wget http://openelec.tv/get-openelec/download/finish/10-raspberry-pi-builds/\
260-openelec-stable-raspberry-pi-arm -O OpenELEC-RPi.arm-3.2.4.tar
tar -xvf OpenELEC-RPi.arm-3.2.4.tar
cd OpenELEC-RPi.arm-3.2.4/
sudo ./create_sdcard /dev/sdh
sync

Patch:

--- create_sdcard  2013-12-02 00:01:00.000000000 -0700
+++ create_sdcard  2013-12-02 00:02:00.000000000 -0700
@@ -207,6 +207,7 @@
 # tell kernel we have a new partition table
   echo "telling kernel we have a new partition table..."
   partprobe "$DISK"
+  echo -n "waiting" ; while [ ! -e "$PART1" ] ; do sleep 1 ; echo -n . ; done ; echo

 # create filesystem
   echo "creating filesystem on $PART1..."
patch -p0 < patch

Tag line: OpenELEC - The living room PC for everyone

WARNING: SSH NOT enabled by default (enable with the initial wizard)

username: root
password: openelec

SSH:


 There is no working 'passwd'.

 The 'passwd' command changes passwords for user accounts.

 With OpenELEC it is not possible to change the system password

 SSH is included only as a last support resort. SSH is off by default.
 Most users never need SSH and need help using it so we need a default
 password. If you need to keep SSH always on then this is unsupported
 but can be secured with certificates.

 TIP: disable password authentication in ssh and use public key authentication.
cd /storage
mkdir pub
mount prime:/pub /storage/pub
----------------------------
----------------------------
----------------------------

Boot Raspberry Pi

## WAIT FOREVER - it will go through several reboots and upgrades
## This will take a while...

Configure Raspberry Pi:

## Login: pi : raspberry
## INITIAL CONFIGURATION WILL PROCEED ON FIRST CONNECTION
## * Locale - en_US
## * Time - America / Mountain
## System will now reboot

sudo su -

## All of the expand filesystem, and other settings are done during the initial setup

passwd   # change root password (eg. Password1)


## Set hostname
hostname pi-wii
echo `hostname` > /etc/hostname


## RESTART SYSLOG
/etc/init.d/rsyslog restart


## This will take a while...
apt-get update
apt-get -y install vim screen espeak mpg321 curl alsa-utils wireless-tools wpasupplicant
apt-get autoremove


## Verify sound
wget http://www.freespecialeffects.co.uk/soundfx/sirens/police_s.wav
aplay police_s.wav
wget http://www.freespecialeffects.co.uk/soundfx/household/bubbling_water_1.mp3
mpg321 bubbling_water_1.mp3


# SETUP DEFAULT EDITOR
echo "" >> /etc/profile
echo "export EDITOR=vim" >> /etc/profile
export EDITOR=vim


adduser kenneth  # this will also set the password
# --- PASSWORD --- #
# --- PASSWORD --- #
# --- PASSWORD --- #


# passwd kenneth  # set password
visudo  # add to visudo  (note: need vim as EDITOR has been set)
  # --- VISUDO --- #
  # --- VISUDO --- #
  # --- VISUDO --- #
  kenneth ALL=(ALL) NOPASSWD: ALL


## clear message of the day
> /etc/motd


cat > /usr/local/bin/piserial << "EOF"
#!/bin/bash
cat /proc/cpuinfo | grep Serial | awk '{print $3'}
EOF
chmod +x /usr/local/bin/piserial
# test
piserial


cat > /usr/local/bin/piregister << "EOF"
#!/bin/bash
# cron: 0 0 * * *   /usr/local/bin/piregister
_IP=$(hostname -I | awk '{print $1}') || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
  HOSTNAME=`hostname`
  SERIAL=`/usr/local/bin/piserial`
  /usr/bin/curl http://pi.oeey.com/register/$SERIAL/$HOSTNAME/$_IP
  logger "Registered as http://pi.oeey.com/register/$SERIAL/$HOSTNAME/$_IP"
  #espeak "Welcome to Rasberry pi. My I.P. is $_IP. I repeat: $_IP"
  logger "Welcome to Rasberry pi. My I.P. is $_IP. I repeat: $_IP"
else
  #espeak "Welcome to Rasberry pi. No I.P. found."
  logger "Welcome to Rasberry pi. No I.P. found."
fi
EOF
chmod +x /usr/local/bin/piregister
# test
piregister


## ADD TO CRON:
echo "# m h  dom mon dow   command" > tmpcron
echo "0 0 * * *   /usr/local/bin/piregister" >> tmpcron
echo "*/10 * * * *  /usr/bin/logger -- \"-- MARK -- `date`\"" >> tmpcron
crontab tmpcron
rm -f tmpcron


## ADD TO BOOT
sed -i '/exit 0/d' /etc/rc.local
echo "" >> /etc/rc.local
echo "/usr/local/bin/piregister" >> /etc/rc.local
echo "" >> /etc/rc.local
echo "exit 0" >> /etc/rc.local


## Wireless: http://wireless.kernel.org/en/users/Documentation/iw
cat > /etc/wpa_supplicant/wpa_supplicant.conf << "EOF"
#ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
# reading passphrase from stdin
network={
        ssid="toast"
        #psk="MYPASSWORD"
        psk=8085564ae7b7ebaf397eb5eebfe5a1ec093f8b78aa00fadb9cf7f810742bba55
}
EOF

cp /etc/wpa_supplicant/functions.sh /etc/wpa_supplicant/functions.sh.bak
sed -i 's/nl80211,//g' /etc/wpa_supplicant/functions.sh

cat >> /etc/network/interfaces << "EOF"
auto wlan0
iface wlan0 inet dhcp
pre-up wpa_supplicant -D wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
post-down killall -q wpa_supplicant
EOF
# /sbin/wpa_supplicant -u -s -O /var/run/wpa_supplicant
# -u enable dbus,  -s log to syslog,  -O override ctrl_interface,  -B daemon,  -D driver,  -i interface

## ADD TO BOOT
sed -i '/exit 0/d' /etc/rc.local
echo "" >> /etc/rc.local
echo "/sbin/wpa_supplicant -D wext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B" >> /etc/rc.local
echo "" >> /etc/rc.local
echo "exit 0" >> /etc/rc.local

ifdown --force wlan0
rm -f /var/run/wpa_supplicant/wlan0
modprobe -r 8192cu
#killall wpa_supplicant
for i in `pidof wpa_supplicant` ; do kill $i ; done
# wait a second

modprobe 8192cu
#ifup wlan0

for i in `pidof wpa_supplicant` ; do kill $i ; done ; /sbin/wpa_supplicant -D wext -i wlan0 \
   -c /etc/wpa_supplicant/wpa_supplicant.conf -B

iwconfig
iwlist wlan0 scan
iwconfig wlan0 mode Managed
iwconfig wlan0 essid toast


# NFS
service rpcbind restart
update-rc.d rpcbind defaults
echo "prime:/pub      /pub            nfs     defaults        0 0" >> /etc/fstab
mkdir /pub
mount /pub


reboot
# --- REBOOT --- #
# --- REBOOT --- #
# --- REBOOT --- #


# Wireless should now be running

References:

---

Wifi:

PiMAME

Note: Ethernet with SSHD configured on by default

Projects and Accessories

Raspberry Pi Verified Peripherals - http://elinux.org/RPi_VerifiedPeripherals

SD Card

Need at least a 4GB SD card, at class 4 or higher.

RPi SD cards - eLinux.org - http://elinux.org/RPi_SD_cards

SD Card Reader

# dmesg
[204322.670729] usb 1-1.3: new high-speed USB device number 5 using dwc_otg
[204322.771753] usb 1-1.3: New USB device found, idVendor=1a40, idProduct=0201
[204322.771784] usb 1-1.3: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[204322.771800] usb 1-1.3: Product: USB 2.0 Hub [MTT]
[204322.783406] hub 1-1.3:1.0: USB hub found
[204322.783869] hub 1-1.3:1.0: 7 ports detected
[204323.060781] usb 1-1.3.1: new high-speed USB device number 6 using dwc_otg
[204323.161813] usb 1-1.3.1: New USB device found, idVendor=1a40, idProduct=0101
[204323.161844] usb 1-1.3.1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[204323.161860] usb 1-1.3.1: Product: USB 2.0 Hub
[204323.162972] hub 1-1.3.1:1.0: USB hub found
[204323.163323] hub 1-1.3.1:1.0: 4 ports detected
[204323.240696] usb 1-1.3.5: new high-speed USB device number 7 using dwc_otg
[204323.354948] usb 1-1.3.5: New USB device found, idVendor=0781, idProduct=b6b7
[204323.354980] usb 1-1.3.5: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[204323.354997] usb 1-1.3.5: Product: ImageMate 9 in 1 Reader/Writer
[204323.355011] usb 1-1.3.5: Manufacturer: SanDisk
[204323.355026] usb 1-1.3.5: SerialNumber: 200702210B
[204323.363171] scsi0 : usb-storage 1-1.3.5:1.0
[204324.362454] scsi 0:0:0:0: Direct-Access     Generic  STORAGE DEVICE   9335 PQ: 0 ANSI: 0
[204324.436649] sd 0:0:0:0: [sda] 15278080 512-byte logical blocks: (7.82 GB/7.28 GiB)
[204324.438159] sd 0:0:0:0: [sda] Write Protect is off
[204324.438194] sd 0:0:0:0: [sda] Mode Sense: 03 00 00 00
[204324.439747] sd 0:0:0:0: [sda] No Caching mode page present
[204324.439775] sd 0:0:0:0: [sda] Assuming drive cache: write through
[204324.449264] sd 0:0:0:0: [sda] No Caching mode page present
[204324.449298] sd 0:0:0:0: [sda] Assuming drive cache: write through
[204324.451678]  sda: sda1 sda2
[204324.456653] sd 0:0:0:0: [sda] No Caching mode page present
[204324.456688] sd 0:0:0:0: [sda] Assuming drive cache: write through
[204324.456711] sd 0:0:0:0: [sda] Attached SCSI removable disk


[204392.361551] usb 1-1.3.5: USB disconnect, device number 7

USB HDD

[ 1146.126669] usb 1-1.3.7: new high-speed USB device number 11 using dwc_otg
[ 1146.229300] usb 1-1.3.7: New USB device found, idVendor=154b, idProduct=007a
[ 1146.229331] usb 1-1.3.7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1146.229347] usb 1-1.3.7: Product: USB 2.0 FD
[ 1146.229361] usb 1-1.3.7: Manufacturer: PNY Technologies
[ 1146.229374] usb 1-1.3.7: SerialNumber: AD6BHE03000000263
[ 1146.236707] usb-storage 1-1.3.7:1.0: USB Mass Storage device detected
[ 1146.246578] scsi0 : usb-storage 1-1.3.7:1.0
[ 1147.678718] scsi 0:0:0:0: Direct-Access     PNY      USB 2.0 FD       1100 PQ: 0 ANSI: 4
[ 1147.680426] sd 0:0:0:0: [sda] 15950592 512-byte logical blocks: (8.16 GB/7.60 GiB)
[ 1147.681309] sd 0:0:0:0: [sda] Write Protect is off
[ 1147.681343] sd 0:0:0:0: [sda] Mode Sense: 43 00 00 00
[ 1147.682049] sd 0:0:0:0: [sda] No Caching mode page found
[ 1147.682077] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1147.686527] sd 0:0:0:0: [sda] No Caching mode page found
[ 1147.686563] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1147.689505]  sda: sda1
[ 1147.693460] sd 0:0:0:0: [sda] No Caching mode page found
[ 1147.693498] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1147.693523] sd 0:0:0:0: [sda] Attached SCSI removable disk

WD My Book USB HDD

usb 1-1.3: new high-speed USB device number 4 using dwc_otg
usb 1-1.3: New USB device found, idVendor=1058, idProduct=1230
usb 1-1.3: New USB device strings: Mfr=2, Product=3, SerialNumber=1
usb 1-1.3: Product: My Book 1230
usb 1-1.3: Manufacturer: Western Digital
usb 1-1.3: SerialNumber: 574D43344D31303732363938
usb-storage 1-1.3:1.0: USB Mass Storage device detected
scsi0 : usb-storage 1-1.3:1.0
scsi 0:0:0:0: Direct-Access     WD       My Book 1230     1050 PQ: 0 ANSI: 6
sd 0:0:0:0: [sda] 3906963456 512-byte logical blocks: (2.00 TB/1.81 TiB)
scsi 0:0:0:1: Enclosure         WD       SES Device       1050 PQ: 0 ANSI: 6
sd 0:0:0:0: [sda] Write Protect is off
sd 0:0:0:0: [sda] Mode Sense: 53 00 10 08
sd 0:0:0:0: [sda] No Caching mode page found
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] No Caching mode page found
sd 0:0:0:0: [sda] Assuming drive cache: write through
 sda: sda1
sd 0:0:0:0: [sda] No Caching mode page found
sd 0:0:0:0: [sda] Assuming drive cache: write through
sd 0:0:0:0: [sda] Attached SCSI disk
Disk /dev/sda: 2000.4 GB, 2000365289472 bytes
255 heads, 63 sectors/track, 243197 cylinders, total 3906963456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x4537f807

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048  3906963455  1953480704    7  HPFS/NTFS/exFAT

Modified:

Disk /dev/sda: 2000.4 GB, 2000365289472 bytes
255 heads, 63 sectors/track, 243197 cylinders, total 3906963456 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x4537f807

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048  3906963455  1953480704   83  Linux

Wireless Wifi

Raspberry Pi Verified Wi-Fi Adapters - http://elinux.org/RPi_USB_Wi-Fi_Adapters

  • Amazon.com: Edimax EW-7811Un 150 Mbps Wireless 11n Nano Size USB Adapter with EZmax Setup Wizard: Computers & Accessories - http://amzn.com/B003MTTJOY ($10)
  • Amazon.com: EW-7811UN IEEE 802.11n (draft) USB - Wi-Fi Adapter: Computers & Accessories - http://amzn.com/B005CLMJLU ($12)
  • Amazon.com: Wi-Pi Raspberry Pi 802.11n Wireless Adapter: Computers & Accessories - http://amzn.com/B00BDW6D7I ($18)

Edimax Wi-Fi Installation:

  • Connect Edimax Wi-Fi adapter
  • lsusb
    • "Bus 001 Device 004: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]"
  • lsmod
    • 8192cu
  • iwconfig
    • wlan0
  • ifconfig
    • wlan0
lsusb    # look for edimax
iwlist   # make sure wlan0 appears
iwlist wlan0 scan  # scan for access points
iwconfig wlan0 essid toast   # set ssid
iwconfig wlan0 mode managed  # set mode to managed
wpa_passphrase [SSID] >> /etc/wpa_supplicant/wpa_supplicant.conf      # set wpa password
wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -D wext    # start wpa daemon

Note: if you are unable to connect:

  • Try connecting to a *powered* USB Hub
  • Try running "apt-get update ; apt-get upgrade", this has occasionally worked for me.

References:

---

/etc/network/interfaces

# cat interfaces
auto lo
iface lo inet loopback

iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
        wpa-ssid "toast"
        wpa-psk "MYPASSWORD"
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

#allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface default inet dhcp

Default /etc/network/interfaces:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

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

For static:

iface wlan0 inet static
address 10.0.0.1
netmask 255.255.255.0

References:

---

wpa_passphrase toast MYPASSWORD >> /etc/wpa_supplicant/wpa_supplicant.conf

/etc/wpa_supplicant/wpa_supplicant.conf

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

network={
  ssid="SSID-GOES-HERE"
  psk="WIFI-PASSWORD-GOES-HERE"
}

default /etc/wpa_supplicant/wpa_supplicant.conf:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
# wpa_passphrase test testtesttest
network={
        ssid="test"
        #psk="testtesttest"
        psk=b6df3a2ab8a19db1b646e4a852892d39fc4e73c13cb2ade0ad9d8887bb414ecd
}

---

crontab:

*/10 * * * *    /usr/local/sbin/checknetwork

/usr/local/sbin/checknetwork

#!/bin/bash

ping -c 3 10.10.10.1 > /dev/null
if [ $? -ne 0 ] ; then
    logger "Network Failure: restarting network"
    nohup sh -c "ifdown wlan0 ; killall wpa_supplicant ; sleep 1 ; ifup wlan0"
fi

References:

---

Edimax:

#dmesg
[  297.354979] usb 1-1.2.4.3: new high-speed USB device number 7 using dwc_otg
[  297.456950] usb 1-1.2.4.3: New USB device found, idVendor=7392, idProduct=7811
[  297.456985] usb 1-1.2.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  297.457001] usb 1-1.2.4.3: Product: 802.11n WLAN Adapter
[  297.457014] usb 1-1.2.4.3: Manufacturer: Realtek
[  297.457030] usb 1-1.2.4.3: SerialNumber: 00e04c000001

# lsusb
Bus 001 Device 007: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter
[Realtek RTL8188CUS]

---

# dmesg
[  418.976772] usb 1-1.2.4.3: new high-speed USB device number 8 using dwc_otg
[  419.078727] usb 1-1.2.4.3: New USB device found, idVendor=0bda, idProduct=8176
[  419.078759] usb 1-1.2.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  419.078775] usb 1-1.2.4.3: Product: 802.11n WLAN Adapter
[  419.078789] usb 1-1.2.4.3: Manufacturer: Realtek
[  419.078804] usb 1-1.2.4.3: SerialNumber: 00e04c000001

# lsusb
Bus 001 Device 008: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
# tail /var/log/syslog
Dec 11 20:23:55 pi-laura kernel: [  149.545006] usb 1-1.2.4.4: new high-speed USB device number 6 using dwc_otg
Dec 11 20:23:55 pi-laura kernel: [  149.646974] usb 1-1.2.4.4: New USB device found, idVendor=0bda,
idProduct=8176
Dec 11 20:23:55 pi-laura kernel: [  149.647009] usb 1-1.2.4.4: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
Dec 11 20:23:55 pi-laura kernel: [  149.647026] usb 1-1.2.4.4: Product: 802.11n WLAN Adapter
Dec 11 20:23:55 pi-laura kernel: [  149.647039] usb 1-1.2.4.4: Manufacturer: Realtek
Dec 11 20:23:55 pi-laura kernel: [  149.647055] usb 1-1.2.4.4: SerialNumber: 00e04c000001
Dec 11 20:23:55 pi-laura kernel: [  150.038071] usbcore: registered new interface driver rtl8192cu
Dec 11 20:23:55 pi-laura ifplugd(wlan0)[2314]: ifplugd 0.28 initializing.
Dec 11 20:23:56 pi-laura wpa_supplicant[2325]: rfkill: Cannot open RFKILL control device
Dec 11 20:23:56 pi-laura ifplugd(wlan0)[2314]: Using interface wlan0/00:13:EF:D0:2A:7A with driver <rtl8192cu>
(version: )
Dec 11 20:23:56 pi-laura ifplugd(wlan0)[2314]: Using detection mode: wireless extension
Dec 11 20:23:56 pi-laura ifplugd(wlan0)[2314]: Initialization complete, link beat not detected.
...

# lsusb
Bus 001 Device 006: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

Wants to use driver: nl80211, but it should be covered under the 8192cu (rtl8192cu) module

ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument

Dec 12 01:45:20 raspberrypi wpa_supplicant[4096]: nl80211: 'nl80211' generic netlink not found
Dec 12 01:45:20 raspberrypi wpa_supplicant[4096]: Failed to initialize driver 'nl80211'

Dec 12 01:45:20 raspberrypi wpa_supplicant[4096]: rfkill: Cannot open RFKILL control device

- Netlink -

"Netlink is the new (it's actually not really new, it's been around for a long time) way to configure all things wireless."

"If it really bothers you, there's a line somewhere in the netcfg scripts which contains "-Dnl80211,wext'."

cp /etc/wpa_supplicant/functions.sh /etc/wpa_supplicant/functions.sh.original
sed -i "s/nl80211,wext/wext/g" /etc/wpa_supplicant/functions.sh

Reference: Error message on wireless connect after latest netcfg update (Page 1) / Networking, Server, and Protection / Arch Linux Forums - https://bbs.archlinux.org/viewtopic.php?pid=940669

---

Show USB details:

# lsusb -v -d 7392: | less
Bus 001 Device 004: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wi
reless Adapter [Realtek RTL8188CUS]
...
Device Descriptor:
  idVendor           0x7392 Edimax Technology Co., Ltd
  idProduct          0x7811 EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
  iManufacturer           1 Realtek
  iProduct                2 802.11n WLAN Adapter
  iSerial                 3 00e04c000001
...
  Configuration Descriptor:
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA

List all devices and power settings:

lsusb -v | grep -i -e power -e vendor

Web Camera

RPi USB Webcams - eLinux.org - http://elinux.org/RPi_USB_Webcams

RPi VerifiedPeripherals - eLinux.org - http://elinux.org/RPi_VerifiedPeripherals#USB_Webcams

--

# dmesg
[  786.978131] usb 1-1.2.4.4: new high-speed USB device number 10 using dwc_otg
[  787.185706] usb 1-1.2.4.4: New USB device found, idVendor=0ac8, idProduct=332d
[  787.185740] usb 1-1.2.4.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  787.185756] usb 1-1.2.4.4: Product: boynq iris webcam
[  787.185770] usb 1-1.2.4.4: Manufacturer: yousp Corp.
[  787.306853] media: Linux media interface: v0.10
[  787.334399] Linux video capture interface: v2.00
[  787.368144] uvcvideo: Found UVC 1.00 device boynq iris webcam (0ac8:332d)
[  787.372609] input: boynq iris webcam as /devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4.4/1-1.2.4.4:1.0/input/input0
[  787.373545] usbcore: registered new interface driver uvcvideo
[  787.373568] USB Video Class driver (1.1.1)
[  787.491639] usbcore: registered new interface driver snd-usb-audio

# lsusb
Bus 001 Device 010: ID 0ac8:332d Z-Star Microelectronics Corp. Vega USB 2.0 Camera

fswebcam

Install:

sudo apt-get install fswebcam

Use:

fswebcam -d /dev/video0 cam.jpeg
fswebcam -d /dev/video0 -r 640x480 cam.jpeg

To determine max resolution pick some really high resolution, it will downsample:

# fswebcam -d /dev/video0 -r 1000x1000 cam.jpg
Adjusting resolution from 1000x1000 to 640x480.

Get additional verbose information about the camera and captuer:

fswebcam -v -r 640x480 -d /dev/video0 cam.jpg

To flip or rotate an image:

# Flips the image. Direction can be (h)orizontal or (v)ertical. Example:
--flip h    # Flips the image horizontally.
--flip h,v  # Flips the image both horizontally and vertically.
--rotate <angle>  # Rotate the image in right angles (90, 180 and 270 degrees).
                  # Note: Rotating the image 90 or 270 degrees will swap the dimensions.

---

If you have a black screen...

Some cameras require YUYV:

fswebcam -d /dev/video0 -r 640x480 -p YUYV cam.jpeg

Some cameras require skipping frames:

fswebcam -d /dev/video0 -r 640x480 -S 3 cam.jpeg

Try using a powered USB hub.

Some cameras work better with motion than fswebcam.

---

See more at: http://www.slblabs.com/2012/09/26/rpi-webcam-stream/#sthash.6GShyaYY.dpuf

fswebcam -r 640x480 -S 15 --flip h --jpeg 95 --shadow --title "SLB Labs" --subtitle "Home" \
   --info "Monitor: Active @ 1 fpm" --save home.jpg -q -l 60
Timelapse

Timelapse: [12]

#!/bin/bash
# Timelapse controller for USB webcam

DIR=/home/pi/timelapse

x=1
while [ $x -le 1440 ]; do

filename=$(date -u +"%d%m%Y_%H%M-%S").jpg

fswebcam -d /dev/video0 -r 640x480 $DIR/$filename

x=$(( $x + 1 ))

sleep 10;

done;

Build Movie:

cd timelapse
ls *.jpg > list.txt
sudo apt-get install mencoder
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=640:480 -o timelapse.avi -mf type=jpeg:fps=24 mf://@list.txt

References:

---


9551258809_4d5f0f0457_o.jpg?fit=300%2C200&fixwiki=.jpg


References:

Streaming

Raspberry Pi – Webcam streaming | SLB Labs - http://www.slblabs.com/2012/09/26/rpi-webcam-stream/

motion is a rather complete surveillance system with no fancy stuff and straight to the point, yet very customizable. Among what it can do, it is capable of motion detection, frame recording, video recording, timelapse - See more at: http://www.slblabs.com/2012/09/26/rpi-webcam-stream/#sthash.on7sdpoK.dpuf

apt-get install motion

/etc/motion/motion.conf

  • webcontrol_port (default 8080) and stream_port (default 8081)

Run:

motion

Web:

http://RPI-IP:webcontrol_port

---

mjpeg-streamer [13]

---

FPV setup with raspberry Pi - DIY Drones - http://diydrones.com/profiles/blogs/fpv-setup-with-raspberry-pi

mkfifo buffer
nc -p 5001 -l > buffer | /opt/vc/src/hello_pi/hello_video/hello_video.bin buffer


raspivid -t 0 -fps 15 -o - | nc 192.168.1.85 5001
Logitec Webcam

Error:

gd-jpeg: JPEG library reports unrecoverable error: Not a JPEG file: starts with 0x89 0x80

Solution:

   fswebcam -p YUYV -d /dev/video0 -r 640x480 $DIR/$filename

"Try this command, for my camera i need to change -p parametar its logitech c170 and works only with -p YUYV"

Video Surveillance

Raspberry Pi as low-cost HD surveillance camera - CodeProject - http://www.codeproject.com/Articles/665518/Raspberry-Pi-as-low-cost-HD-surveillance-camera

Motion detection

sudo apt-get install motion

To support Raspberry Pi Camera Module:

cd /tmp 
sudo apt-get install -y libjpeg62 libjpeg62-dev libavformat53 libavformat-dev libavcodec53 libavcodec-dev \
  libavutil51 libavutil-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 libpq-dev
wget https://www.dropbox.com/s/xdfcxm5hu71s97d/motion-mmal.tar.gz
tar zxvf motion-mmal.tar.gz
sudo mv motion /usr/bin/motion
sudo mv motion-mmalcam.conf /etc/motion.conf
vim /etc/default/motion
  start_motion_daemon=yes
vim /etc/motion.conf
  daemon on
  logfile /tmp/motion.log
  width 1280
  height 720
  framerate 2
  pre_capture 2
  post_capture 2
  max_mpeg_time 600
  ffmpeg_video_codec msmpeg4
  stream_localhost off
  stream_auth_method 2  
  stream_authentication SOMEUSERNAME:SOMEPASSWORD
# We don't need real-time video, 2 pictures per second are totally ok for our needs:
sudo chmod 664 /etc/motion.conf
sudo chmod 755 /usr/bin/motion
sudo touch /tmp/motion.log
sudo chmod 775 /tmp/motion.log

motion

Raspbian:

sudo apt-get install motion

CentOS:

yum install motion

Files:

/etc/motion
/etc/motion/motion.conf
/etc/rc.d/init.d/motion
/usr/bin/motion
/usr/share/man/man1/motion.1.gz
Name       : motion
Summary    : Video-surveilance system
URL        : http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome
License    : GPL
Description: Motion is a software motion detector. It grabs images from video4linux
           : devices and/or from webcams (such as the axis network cameras). Motion
           : is the perfect tool for keeping an eye on your property keeping only
           : those images that are interesting. Motion is strictly command line
           : driven and can run as a daemon with a rather small footprint. It is
           : built with MySQL and PostgreSQL support and mpegs generated by ffmpeg
           : and http remote control.

Help:

man motion

motion - Detect motion using a video4linux device

  • DESCRIPTION: Motion uses a video4linux device to detect motion. If motion is detected both normal and motion pictures will be taken. Motion can also take actions to notify you if needed. Creation of automated snapshots is also possible.

Home - http://www.lavrsen.dk/foswiki/bin/view/Motion/WebHome

Configure:

mkdir .motion
sudo cp /etc/motion/motion.conf ~/.motion/motion.conf
motion -s  # setup mode

Run:

motion
# or
service motion start

stream camera audio

Find devices:

arecord -L

Stream audio through nc:

arecord -D default:CARD=webcam -f dat | nc -l 5001

Pick up audio remotely: (play out.wav with VLC)

nc remote-server 5001 > out.wav
nc -l 7000 | aplay

References:

Camera Module

Raspberry Pi Camera

Camera | Raspberry Pi - How to set up the camera hardware (video) - http://www.raspberrypi.org/camera

  • Includes instructions for transmitting/receiving video stream over network

--

Rpi Camera Module - eLinux.org - http://elinux.org/Rpi_Camera_Module

"The Raspberry Pi camera board contains a 5 MPixel sensor, and connects via a ribbon cable to the CSI connector on the Raspberry Pi. A User's Guide describes setup and use. The video and still image quality is better than a USB webcam of similar price.

The Pi camera was released for sale on the 14th of May 2013 and the initial production was 10k units.

The "Pi NoIR" version of the camera was released on the 28th of October 2013. It has the same sensor with the IR filter removed, and a black PCB. With no IR filter, it can see near-IR wavelengths (700 - 1000 nm) like a security camera, with the tradeoff of poor color rendition. It is otherwise the same and uses the same software as the normal Pi camera. Technical Parameters

--

raspi-config - Enable Camera - "Enable this Pi to work with the Raspberry Pi Camera" [14]

/boot/config.txt

start_x=1
gpu_mem=128

--

Technical Parameters [15]

  • Sensor type: OmniVision OV5647 Color CMOS QSXGA (5-megapixel)
  • Sensor size: 3.67 x 2.74 mm
  • Pixel Count: 2592 x 1944
  • Pixel Size: 1.4 x 1.4 um
  • Lens: f=3.6 mm, f/2.9
  • Angle of View: 54 x 41 degrees
  • Field of View: 2.0 x 1.33 m at 2 m
  • Full-frame SLR lens equivalent: 35 mm
  • Fixed Focus: 1 m to infinity
  • Video: 1080p at 30 fps with codec H.264 (AVC)
  • Board size: 25 x 24 mm (not including flex cable)

Because the focal length of the lens is roughly the same as the width of the sensor, it is easy to remember the field of view: at x meters away, you can see about x meters horizontally, assuming 4x3 stills mode. Horizontal field of view in 1080p video mode is 75% of that (75% H x 55% V sensor crop for 1:1 pixels at 1920x1080).

--

Camera LED

The cameras red LED lights up when recording video or taking a still picture, this can be turned off by adding the following line to config.txt (RPiconfig) [16]

disable_camera_led=1

It's possible to turn it back on at runtime by using GPIO5

--

User's Guide - http://www.raspberrypi.org/wp-content/uploads/2013/07/RaspiCam-Documentation.pdf

--

Documentation: https://github.com/raspberrypi/userland/blob/master/host_applications/linux/apps/raspicam/RaspiCamDocs.odt

-- Purchase:

--

Configure:

  1. sudo raspi-config
  2. Navigate to “camera” and select “enable”.
  3. reboot

--

Still image:

raspistill -o image.jpg
raspistill -o image.jpg -w 320 -h 240
raspistill -o image.jpg -w 640 -h 480

Record 60 seconds of video

raspivid -o video.h264 -t 60000

Video:

  • Codec: H264 - MPEG-4 AVC (part 10) (h264)
  • Resolution: 1920x1080
  • Decoded format: Planar 4:2:0 YUV (?is this part of the video of VLC?)
  • Aspect Ratio: 16:9

--

Convert h264 to mp4:

ffmpeg -f h264 -i test.avi -vcodec copy test.mp4

Then one can use HandBrake to trim the video.

--

To disable the red camera LED, add the following to /boot/config.txt [17]

disable_camera_led=1

Or it is controlled by GPIO 5. I've tried it out in a live Python environment and with the LED diabled in config.txt, toggling GPIO 5 switches the LED on and off at will.

#!/usr/bin/env python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(5, GPIO.OUT, initial=False)
raspivid -d -t 10000 & sudo ./disablecamled.py

Note: The reason you can toggle GPIO5 with RPi.GPIO and not the bash shell, is because the Python module accesses /dev/mem directly (and prints a warning message, which I've turned off in the code above) whereas the bash shell accesses the GPIO via sysfs (which I guess can't "ignore" the warning message).

---

# raspistill -o test
mmalipc: mmal_vc_init: could not open vchiq service
mmal: mmal_vc_component_create: failed to initialise mmal ipc for 'vc.ril.camera' (7:EIO)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (7)
mmal: Failed to create camera component
mmal: main: Failed to create camera component
mmal: Camera is not enabled in this build. Try running "sudo raspi-config" and ensure that "camera" has been enabled
  • 5 Enable Camera - Enable this Pi to work with the Raspberry Pi


Streaming

Stream (Transmit) from Raspberry Pi: (must have receiving system setup first)

raspivid -t 999999 -o - | nc [insert the IP address of the client] 5001

Linux View:

sudo apt-get install mplayer netcat
nc -l -p 5001 | mplayer -fps 31 -cache 1024 -

Windows View:

Install and run Linux instead.
Download MPlayer.
Download Netcat/
[Path to nc.exe]\nc.exe -L -p 5001 | [Path to mplayer.exe]\mplayer.exe -fps 31 -cache 1024 -

Pi NoIR

Pi NoIR - Infrared Camera Module with 5 Megapixel, up to 2592 x 1944 pixels image size, 1080p30 video

Purchase:

PiNoIR – what’s it for? Comparison of RasPiCam and Pi NoIR output in daylight » RasPi.TV - http://raspi.tv/2013/pinoir-whats-it-for-comparison-of-raspicam-and-pi-noir-output-in-daylight

Wild Life - Instant Wild satellite cameras protect animals through crowdsourcing (video) - http://www.engadget.com/2013/09/07/instant-wild-satellite-cameras/

Pi NoIR | Raspberry Pi - http://www.raspberrypi.org/archives/tag/pi-noir

Public Lab: Near-Infrared Camera - http://publiclab.org/wiki/near-infrared-camera

"Vineyards, large farms, and NASA all use near-infrared photography for assessing plant health, usually by mounting expensive sensors on airplanes and satellites. At Public Lab, we've developed a Do-It-Yourself way to take these kinds of photos, enabling us to monitor our environment through quantifiable data."

Pi Car Cam

<Stuff about="code" />: Raspberry Pi Car Cam overlaid with OBD data - http://www.stuffaboutcode.com/2013/07/raspberry-pi-car-cam-overlaid-with-obd.html

"I then created a program which converted the OBD-II data into a subtitle file and used mencoder to overlay the data (RPM, MPH, Temperature & Throttle position) as subtitles on top of the video."

filename=$(date -u +"%Y%m%d_%H%M%S").h264
raspivid -o /home/pi/$filename -hf -vf -t 1200000 > /home/pi/camera.log 2>&1 &

Convert H264 to MP4

Convert h264 to mp4:

ffmpeg -f h264 -i test.avi -vcodec copy test.mp4
ffmpeg -f h264 -i TEST.H264 -vcodec copy TEST.MP4

Then one can use HandBrake to trim the video.

--- Capturing HD Video With The Pi Camera Module | Raspberry Pi Spy - http://www.raspberrypi-spy.co.uk/2013/05/capturing-hd-video-with-the-pi-camera-module/

  • Convert Raw H264 Video Data To MP4
sudo apt-get install -y gpac
MP4Box -fps 30 -add myvid.h264 myvid.mp4

This will wrap your H264 video data in an MP4 container file. This will allow most media players to play the video. This will give you a nice video at 30 frames per second that should play in most modern media players.

Play Video File

In order to play your newly created MP4 files you can use OMXPlayer.

sudo apt-get -y install omxplayer
omxplayer myvid.mp4
omxplayer -p -o hdmi myvid.mp4  # over hdmi

VLC also works great.

camera module motion support

---


#!/bin/bash
echo "Content-type: text/html"
echo
raspistill -o -

- should be image/jpeg not text/html - send a smaller image, you're sending a massive 2592x1944 - reduce default timeout to 0

Raspberry Pi • View topic - Camera module problem with motion - http://www.raspberrypi.org/phpBB3/viewtopic.php?t=44025

Night Vision

Infrared camera – you asked us, so we’re making them! | Raspberry Pi - http://www.raspberrypi.org/archives/5089

Surveillance Camera

Raspberry Pi as low-cost HD surveillance camera - http://www.instructables.com/id/Raspberry-Pi-as-low-cost-HD-surveillance-camera/

raspistill permissions

Error:

failed to open vchiq instance

To give you permissions:

sudo usermod -a -G video [your_username]

To give apache permissions:

sudo usermod -a -G video www-data

Check device creation rule:

etc/udev/rules.d/raspberrypi.rules
SUBSYSTEM=="vchiq|input", MODE="0777"

References:

10 Key Pad

[ 1572.671509] usb 1-1.2.4.1: new full-speed USB device number 11 using dwc_otg
[ 1572.785897] usb 1-1.2.4.1: New USB device found, idVendor=05a4, idProduct=9837
[ 1572.785932] usb 1-1.2.4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1572.785950] usb 1-1.2.4.1: Product: USB Keyboard Hub
[ 1572.785964] usb 1-1.2.4.1: Manufacturer: ORTEK
[ 1572.794726] hub 1-1.2.4.1:1.0: USB hub found
[ 1572.796901] hub 1-1.2.4.1:1.0: 3 ports detected
[ 1573.082438] usb 1-1.2.4.1.3: new full-speed USB device number 12 using dwc_otg
[ 1573.195949] usb 1-1.2.4.1.3: New USB device found, idVendor=05a4, idProduct=9862
[ 1573.195985] usb 1-1.2.4.1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1573.196002] usb 1-1.2.4.1.3: Product: USB Keyboard Hub
[ 1573.196016] usb 1-1.2.4.1.3: Manufacturer: ORTEK
[ 1573.208928] input: ORTEK USB Keyboard Hub as /devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4.1/1-1.2.4.1.3/1-1.2.4.1.3:1.0/input/input1
[ 1573.210887] hid-generic 0003:05A4:9862.0001: input,hidraw0: USB HID v1.10 Keyboard [ORTEK USB Keyboard Hub] on usb-bcm2708_usb-1.2.4.1.3/input0
[ 1573.238276] input: ORTEK USB Keyboard Hub as /devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4.1/1-1.2.4.1.3/1-1.2.4.1.3:1.1/input/input2
[ 1573.239788] hid-generic 0003:05A4:9862.0002: input,hidraw1: USB HID v1.10 Device [ORTEK USB Keyboard Hub] on usb-bcm2708_usb-1.2.4.1.3/input1
yum install 
sudo pip install evdev
sudo apt-get install python-dev
sudo apt-get install python-setuptools
sudo pip install evdev
pip install evdev
#!/usr/bin/env python

DEVICE = "/dev/input/by-id/usb-ORTEK_USB_Keyboard_Hub-event-kbd"

import string

from evdev import InputDevice
from select import select

keys = "X^1234567890XXXXqwertzuiopXXXXasdfghjklXXXXXyxcvbnmXXXXXXXXXXXXXXXXXXXXXXX"
dev = InputDevice(DEVICE)

while True:
   r,w,x = select([dev], [], [])
   for event in dev.read():
        if event.type==1 and event.value==1:
                print( keys[ event.code ] )

References:

Starter Pack

955 - ADAFRUIT INDUSTRIES - STARTER PACK, RASPBERRY PI | Newark - http://www.newark.com/jsp/search/productdetail.jsp?SKU=44W3510

  • Pi Box, AC Adapter, Cables, SD Card, microSD Reader, Pi Cobbler, Breadboard

Micro SD

pIO - microSD Adapter for Raspberry Pi by rwinscot — Kickstarter - http://www.kickstarter.com/projects/443556734/pio-microsd-adapter-for-raspberry-pi

Other options:

Temperature Sensor

See TEMPer

See Temperature @lert

Thermomemters

Real Time Clock

"If your internet is down when a PI boots up, you may want this for your sprinkler system"

DS1302 Real Time Clock Module with CR2032 3V Battery S9 | eBay - http://www.ebay.com/itm/DS1302-Real-Time-Clock-Module-with-CR2032-3V-Battery-S9-/141010415893?pt=LH_DefaultDomain_0&hash=item20d4e03115

Raspberry Pi Real Time Clock - http://www.hobbytronics.co.uk/raspberry-pi-real-time-clock

How to build an USB real-time clock (usb-rtc) for usage with low-cost Linux systems #piday #raspberrypi @Raspberry_Pi « adafruit industries blog - http://www.adafruit.com/blog/2012/12/14/how-to-build-an-usb-real-time-clock-usb-rtc-for-usage-with-low-cost-linux-systems-piday-raspberrypi-raspberry_pi/

Overview | Adding a Real Time Clock to Raspberry Pi | Adafruit Learning System - http://learn.adafruit.com/adding-a-real-time-clock-to-raspberry-pi/overview

Raspberry Pi RS Pi Internal 4 USB Hub RTC Board | eBay - http://www.ebay.com/itm/Raspberry-Pi-Rs-Pi-internal-4-USB-HUB-RTC-Board-/321068980965?pt=UK_Computing_Internal_Port_Expansion_Cards&hash=item4ac133dae5

USB Development

Teensy USB Development Board The Teensy is a complete USB-based microcontroller development system, in a very small footprint, capable of implementing many types of projects. All programming is done via the USB port. No special programmer is needed, only a standard "Mini-B" USB cable and a PC or Macintosh with a USB port.

teensy3.png

PJRC: Electronic Projects with Components Available Worldwide - http://www.pjrc.com/

LCD I2C

Adafruit Blue&White 16x2 LCD+Keypad Kit for Raspberry Pi ID: 1115 - $19.95 : Adafruit Industries, Unique & fun DIY electronics and kits - http://www.adafruit.com/products/1115

Relay Module

SainSmart 8-Channel 5V Relay Module for Arduino DSP AVR PIC ARM: Amazon.com: Industrial & Scientific ($13) - http://amzn.com/B0057OC5WK

relay.jpg

Craig McNamara : Driving a SainSmart relay with Raspberry Pi - https://coderwall.com/p/izzsig

-

Raspberry Pi • View topic - How to wire a Raspberry Pi to a Sainsmart 5v Relay Board - http://www.raspberrypi.org/phpBB3/viewtopic.php?t=36225

Image is huge, bug good: http://i.imgur.com/4HzhwYB.jpg?ken_wikihack

Bluetooth

RPi USB Bluetooth adapters - eLinux.org - http://elinux.org/RPi_USB_Bluetooth_adapters

Amazon.com: Aitek Bluetooth 4.0 USB adapter (Newest Bluetooth Version Available) Class 2 Smart Ready Adapter w/ Low Energy Technology - For Windows 7/Vista/XP: Everything Else ($10 w/ Prime) - http://www.amazon.com/Aitek-Bluetooth-adapter-Available-Technology/dp/B009WO3Q4M

  • Bluetooth specification 4.0 compliant
  • Symbol rate: 3 Mbps
  • Receiving/Sending range: 20m - 50m
  • Bluetooth low energy Radio USB Dongle
  • Dual-mode Bluetooth transfer
  • Low power selectable 1.2 to 3.6 VI/O
  • WLAN coexistance interface

Driver installation:

sudo apt-get install --no-install-recommends bluetooth

Note: The “–no-install-recommends” ensures we just install the bits we need for basic Bluetooth communication and not a load of other stuff such as printer drivers.

Test status:

# sudo service bluetooth status
[ ok ] bluetooth is running.

When connecting a "Bluetooth CSR 4.0 Dongle"

Sep 14 16:09:35 pi-ken kernel: [13228.953026] usb 1-1.3.4: new full-speed USB device number 6 using dwc_otg
Sep 14 16:09:35 pi-ken kernel: [13229.113306] usb 1-1.3.4: New USB device found, idVendor=0a12, idProduct=0001
Sep 14 16:09:35 pi-ken kernel: [13229.113340] usb 1-1.3.4: New USB device strings: Mfr=0, Product=2, SerialNumber=0
Sep 14 16:09:35 pi-ken kernel: [13229.113356] usb 1-1.3.4: Product: CSR8510 A10
Sep 14 16:09:35 pi-ken kernel: [13229.211827] Bluetooth: Core ver 2.16
Sep 14 16:09:35 pi-ken kernel: [13229.215782] NET: Registered protocol family 31
Sep 14 16:09:35 pi-ken kernel: [13229.215811] Bluetooth: HCI device and connection manager initialized
Sep 14 16:09:35 pi-ken kernel: [13229.215825] Bluetooth: HCI socket layer initialized
Sep 14 16:09:35 pi-ken kernel: [13229.215837] Bluetooth: L2CAP socket layer initialized
Sep 14 16:09:35 pi-ken kernel: [13229.215885] Bluetooth: SCO socket layer initialized
Sep 14 16:09:35 pi-ken kernel: [13229.237282] usbcore: registered new interface driver btusb

Scan for other Bluetooth device:

hcitool scan

Jumper Wires

Amazon.com: 350 pcs New Flexible Solderless Breadboard Jumper Cable Wires Kits for Arduino Male To Male: Electronics ($10) - http://amzn.com/B00DBUL9YW

Amazon.com : 50 PCS Jumper Wires Premium 200mm M/F Male-to-Female : Electronics ($8) - http://amzn.com/B008MRZSH8

Amazon.com: 40pcs Female to Female 2.54mm 0.1 in Jumper Wires F/F: Electronics ($6) - http://amzn.com/B007MRQC1K

51h5wifFi4L._SX385_.jpg

Magnetic Reed Switch

Amazon.com: Magnetic Switch: Car Electronics ($7 w/ Prime) - http://amzn.com/B0009SUF08

  • One of the only switches with both normally closed contacts

DEI - P/N 8601 (was 633T) - Magnetic Switch - Effective Vehicle Security Component

41DVM6RPZAL.jpg

Home Depot:

PIR Motion Sensor

"PIR sensors are used to detect motion from pets/humanoids from about 20 feet away (possibly works on zombies, not guaranteed). "

Overview | Adafruit's Raspberry Pi Lesson 12. Sensing Movement | Adafruit Learning System - http://learn.adafruit.com/adafruits-raspberry-pi-lesson-12-sensing-movement/overview

PIR (motion) sensor ID: 189 - $9.95 : Adafruit Industries, Unique & fun DIY electronics and kits ($10) - http://www.adafruit.com/products/189

Amazon.com: HC-SR501 Human Sensor Module Pyroelectric Infrared: Car Electronics ($7) - http://amzn.com/B007XQRKD4

Amazon.com: 5x Pyroelectric Infrared PIR Motion Sensor Detector Module: Camera & Photo ($15) - http://amzn.com/B008AESDSY


LED

Getting Started with Raspberry Pi GPIO and Python « LWK's Arduino Projects - http://lwk.mjhosting.co.uk/?p=343

electronics_led_diagram.png

Short leg is negative (cathode), long leg is positive (anode). Flat side is negative.

-

RPi Tutorial EGHS:LED output - eLinux.org - http://elinux.org/RPi_Tutorial_EGHS:LED_output

Relay

Raspberry Pi – Driving a Relay using GPIO | SusaNET - http://www.susa.net/wordpress/2012/06/raspberry-pi-relay-using-gpio/

Relay-Sample.png

QIANJI JQC-3F(T73)

Open Home Automation | Control a relay from anywhere using the Raspberry Pi - Open Home Automation - http://openhomeautomation.net/control-a-relay-from-anywhere-using-the-raspberry-pi/

Easy GPIO Web Interface

Raspberry Pi GPIO - The Easy Way - YouTube - https://www.youtube.com/watch?v=0i2C3Qagosc

Button Audio

Analog

ADC - Analog to Digital Converter

"The Raspberry Pi computer does not have a way to read analog inputs. It's a digital-only computer" [18]

"We need a way to make the Pi analog-friendly. We'll do that by wiring up an MCP3008 chip to it. The MCP3008 acts like a 'bridge' between digital and analog. It has 8 analog inputs and the Pi can query it using 4 digital pins. That makes it a perfect addition to the Pi for integrating simple sensors like photocells, FSRs or potentiometers, thermistors, etc.!" [19]

References:

Drive a Servo Motor

The Raspberry Pi has no analog outputs, so this can be a bit tricky.

Tutorial: Raspberry Pi - How-to Drive a Servo Motor via Arduino! - YouTube - http://www.youtube.com/watch?v=tk0QiiD8w7Q

Sprinkler Control

Group: Raspberry Pi - element14 - http://www.element14.com/community/groups/raspberry-pi


H2O IQ - Raised by Savages - http://blog.valkyriesavage.com/blog/2013/01/18/h2o-iq/

Raspberry Pi – Driving a Relay using GPIO | SusaNET - http://www.susa.net/wordpress/2012/06/raspberry-pi-relay-using-gpio/

Relay-Sample.png

Security Alarm Control

CPU Temperature

CPU Temp:

# /opt/vc/bin/vcgencmd measure_temp
temp=43.3'C

# cat /sys/class/thermal/thermal_zone0/temp
43312
#!/usr/bin/env python

import subprocess
import re

cmd = "/opt/vc/bin/vcgencmd measure_temp"
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = ''.join(p.stdout.readlines())
rc = p.wait()

match = re.findall("temp=([0-9]*\.[0-9]*)'C", output)
if match:
    temp = match[0]

print "{0} C".format(temp)

Part of the libraspberrypi-bin package

Waterproof Timelapse Rig

Waterproofing your timelapse rig | Raspberry Pi - http://www.raspberrypi.org/archives/4799

Fotosyn » Simple timelapse camera using Raspberry Pi and a coffee tin - http://www.fotosyn.com/simple-timelapse-camera-using-raspberry-pi-and-a-coffee-tin/

Bitcoin

Bitcoin operated pool table | Raspberry Pi - http://www.raspberrypi.org/archives/4796

-

-

edit /etc/inittab
find the getty's and change one of them eg 6 or add another [but not 7]
e.g. for 3 find
3:23:respawn:/sbin/getty 38400 tty3
and change that to be
3:23:respawn:/usr/local/bin/cgminer

this means when you reboot it will start mining on alt-f3 terminal

you can test this by
sudo kill -HUP 1
to restart init
alt-f3
login file you have a prompt then logout and the miner will start

Serial

Raspberry Pi’s onboard Serial connection | Random Hacks - http://benosteen.wordpress.com/2012/04/24/raspberry-pis-onboard-serial-connection/

FTDI

Serial for security system - some sort of FTDI adapter

Wii Remote

Using Wiimote Wii remote to control Gertboard and Pi via Bluetooth - YouTube - http://www.youtube.com/watch?v=7EAUJGyVNFU

Raspberry Pi + Wii Remote + Python = Awesome!! - YouTube - http://www.youtube.com/watch?v=vEQXFn-KuVs

Nintendo Wii Remote, Python and The Raspberry Pi | Raspberry Pi Spy - http://www.raspberrypi-spy.co.uk/2013/02/nintendo-wii-remote-python-and-the-raspberry-pi/

See #Bluetooth

Install Bluetooth driver:

sudo apt-get install --no-install-recommends bluetooth

Install the CWiid Python Library:

sudo apt-get install python-cwiid

Find Wii remote:

# hcitool scan
Scanning ...
  00:17:AB:26:3F:48       Nintendo RVL-CNT-01

May need to flush:

# hcitool scan --flush --refresh

Get script:

wget http://www.raspberrypi-spy.co.uk/archive/python/wii_remote_1.py

wii_remote_1.py:

#!/usr/bin/python
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k|
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#
# wii_remote_1.py
# Connect a Nintendo Wii Remote via Bluetooth
# and  read the button states in Python.
#
# Project URL :
# http://www.raspberrypi-spy.co.uk/?p=1101
#
# Author : Matt Hawkins
# Date   : 30/01/2013
 
# -----------------------
# Import required Python libraries
# -----------------------
import cwiid
import time
 
button_delay = 0.1
 
print 'Press 1 + 2 on your Wii Remote now ...'
time.sleep(1)
 
# Connect to the Wii Remote. If it times out
# then quit.
try:
  wii=cwiid.Wiimote()
except RuntimeError:
  print "Error opening wiimote connection"
  quit()
 
print 'Wii Remote connected...\n'
print 'Press some buttons!\n'
print 'Press PLUS and MINUS together to disconnect and quit.\n'
 
wii.rpt_mode = cwiid.RPT_BTN
 
while True:
 
  buttons = wii.state['buttons']
 
  # If Plus and Minus buttons pressed
  # together then rumble and quit.
  if (buttons - cwiid.BTN_PLUS - cwiid.BTN_MINUS == 0):
    print '\nClosing connection ...'
    wii.rumble = 1
    time.sleep(1)
    wii.rumble = 0
    exit(wii)
 
  # Check if other buttons are pressed by
  # doing a bitwise AND of the buttons number
  # and the predefined constant for that button.
  if (buttons & cwiid.BTN_LEFT):
    print 'Left pressed'
    time.sleep(button_delay)
 
  if(buttons & cwiid.BTN_RIGHT):
    print 'Right pressed'
    time.sleep(button_delay)
 
  if (buttons & cwiid.BTN_UP):
    print 'Up pressed'
    time.sleep(button_delay)
 
  if (buttons & cwiid.BTN_DOWN):
    print 'Down pressed'
    time.sleep(button_delay)
 
  if (buttons & cwiid.BTN_1):
    print 'Button 1 pressed'
    time.sleep(button_delay)
 
  if (buttons & cwiid.BTN_2):
    print 'Button 2 pressed'
    time.sleep(button_delay)
 
  if (buttons & cwiid.BTN_A):
    print 'Button A pressed'
    time.sleep(button_delay)
 
  if (buttons & cwiid.BTN_B):
    print 'Button B pressed'
    time.sleep(button_delay)
 
  if (buttons & cwiid.BTN_HOME):
    print 'Home Button pressed'
    time.sleep(button_delay)
 
  if (buttons & cwiid.BTN_MINUS):
    print 'Minus Button pressed'
    time.sleep(button_delay)
 
  if (buttons & cwiid.BTN_PLUS):
    print 'Plus Button pressed'
    time.sleep(button_delay)

Another good one: https://sites.google.com/site/brianhensleyfiles/wiimotetest.py

---

HOWTO: Python Wiimote fun (LEDs, rumble, accel, buttons) - maemo.org - Talk - http://talk.maemo.org/showthread.php?t=60178

Count in binary with LEDs:

import cwiid
import time
print "press 1 + 2"
wm = cwiid.Wiimote()
for i in range(16):
    wm.led = i
    print i
    time.sleep(1)

Note: If you want to go fast with LEDs, give a good sleep time after initial connection, or they will all just continue to blink

Rumble:

for i in range(16):
    wm.led = i
    wm.rumble = 1-i%2
    time.sleep(.2)

Last but not least, let's now also get the accelerometer data by enabling the "RPT_ACC" reporting mode (we keep RPT_BTN here as well for the buttons, but don't need to):

wm.rpt_mode = cwiid.RPT_BTN | cwiid.RPT_ACC
wm.state

Let me finish off this short tutorial with a complete example that does the following:

  • If the Wiimote is tilted down on the X axis, enable rumble (otherwise disable)
  • While the "A" button is pressed, increment the LED counter, otherwise leave it the same
import cwiid
import time

print 'Press 1+2 on your Wiimote now...'
wm = cwiid.Wiimote()

time.sleep(1)

wm.rpt_mode = cwiid.RPT_BTN | cwiid.RPT_ACC

wm.led = 1

while True:
    wm.rumble = (wm.state['acc'][0] < 126)
    if wm.state['buttons'] & cwiid.BTN_A:
        wm.led = (wm.state['led'] + 1) % 16
    time.sleep(.2)
  • wm.state['acc'][0] = Roll
  • wm.state['acc'][1] = Pitch (bowling)
  • wm.state['acc'][2] = Both

Nothing seems to affect Yaw. ("Yaw can only be sensed using the Wiimote Plus addon" [20])

http://embeddedcode.files.wordpress.com/2010/12/pry-wiimote.gif?w=320&h=308

Wiimote and GlovePIE | The Embedded Code - http://embeddedcode.wordpress.com/2010/12/07/wiimote-and-glovepie/

---

PixArt optical sensor?

Follow-up Story: Tearing down the Wii --- 'Sensor Bar' Features No Sensor -- Tech-On! - http://techon.nikkeibp.co.jp/english/NEWS_EN/20061128/124569/

wii.rpt_mode = cwiid.RPT_IR
while True:
    print wii.state
    time.sleep(.2)

# {'led': 0, 'ir_src': [{'pos': (720, 154), 'size': 1}, {'pos': (648, 151), 'size': 1}, None, None],
 'rpt_mode': 8, 'ext_type': 0, 'rumble': 0, 'error': 0, 'battery': 146}

HOWTO: Python Wiimote fun (LEDs, rumble, accel, buttons) - maemo.org - Talk - talk.maemo.org/showthread.php?p=785206#post785206

Solenoid

Ding a bell with a solenoid

Using Wiimote Wii remote to control Gertboard and Pi via Bluetooth - YouTube - http://www.youtube.com/watch?v=7EAUJGyVNFU

Raspberry Pi - IR controlled solenoid alarm bell - YouTube - http://www.youtube.com/watch?v=IkKkYLiNVRE

Pi Cluster

The RPiCluster - YouTube - http://www.youtube.com/watch?v=i_r3z1jYHAc

Beowulf Cluster

Debounce Buffer

RPi Tutorial EGHS:Switch Input - eLinux.org - http://elinux.org/RPi_Tutorial_EGHS:Switch_Input

Opto-isolator

Dream Green House • Features • Raspberry Pi I/O - http://www.dreamgreenhouse.com/features/rpi/io/index.php

"An opto-isolator is basically a light controlled switch. It has the advantages of providing optical isolation and enabling higher voltages to be used to control the input, e.g. 12 V dc shown here. The 2.4 kΩ resistor limits the current into the opto-isolator LED to about 5mA. We typically use a The 3.9 kΩ resistor though, to reduce the current to less than 3 mA. If full electrical isolation is not important, you can also use a common ground. "

"We are using the ILQ74 quad opto-isolator in all of our applications (ILQ74 datasheet). It's cheap and reliable and the input LED is compatible with a wide range of input voltages, including the 3.3V found on the Raspberry Pi. "

optoin.jpg

ilq74.jpg

-

The Raspberry Pi Hobbyist: GPIO Input Circuit - http://raspberrypihobbyist.blogspot.com/2012/09/gpio-input-circuit_19.html

LTV847.gif

GPIO-Input-Circuit2.gif

LDR

RPi Tutorial EGHS:LED output - eLinux.org - http://www.raspberrypi-spy.co.uk/2012/08/reading-analogue-sensors-with-one-gpio-pin/

Analog Sensor

RPi Tutorial EGHS:LED output - eLinux.org - http://www.raspberrypi-spy.co.uk/2012/08/reading-analogue-sensors-with-one-gpio-pin/

GPIO Expansion Board

Slice of PI/O - Ciseco PLC - http://shop.ciseco.co.uk/k002-slice-of-pi-o/

  • The Slice of Pi/O gives a Raspberry Pi an extra 16 buffered inputs or outputs. There's now quite a few people making boards with the MCP23017 driver chip on. We think this represents some great lateral thinking and superb design.

Cron

Run script on boot: [21]

@reboot python /home/pi/MyScript.py &

Garage Door

Raspberry Pi Garage Door Opener – With Asterisk Integration - Random Brain Farts By Mr. Harper - http://burkeharper.com/knowledge/?p=112

Seco-larm Alarm Switch Screw Terminals Miniature with 2" Gap - White | SM-217Q/W (SM217QW) | Seco-larm - http://www.mcmelectronics.com/product/82-13869

  • The easy-to-install normallyopen magnetic contacts include a wide 2" gap, for use with loose-fitting doors and windows, steel doors, and other applications where wide gaps are found.

---

Raspberry Pi • View topic - Sensing when Garage Door is Open - http://www.raspberrypi.org/phpBB3/viewtopic.php?f=37&t=9770

Raspberry Pi • View topic - Opening Garage Door with Pi - http://www.raspberrypi.org/phpBB3/viewtopic.php?f=37&t=10030&p=113972

Powered USB Hub

RPi Powered USB Hubs - eLinux.org - http://elinux.org/RPi_Powered_USB_Hubs

Amazon.com : 10 Port USB 2.0 Hub : Usb Network Adapters : Electronics ($9 w/ Prime) - http://amzn.com/B00475WJEY

  • AC/DC Adapter (2A @ 5.0V)

41nq1Gx1qHL.jpg

NFS

Error:

# mount prime:/pub mnt
mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified
update-rc.d rpcbind defaults
service rpcbind restart
mount prime:/pub /pub

--- Server ---

apt-get install nfs-kernel-server   # alias: nfs-server
service nfs-kernel-server restart
update-rc.d nfs-kernel-server defaults

/etc/exports

/pub            10.10.10.0/24(rw,no_root_squash,no_all_squash,sync)
/hdd            10.10.10.0/24(rw,no_root_squash,no_all_squash,sync)

If it doesn't start in the appropriate runlevel: [22]

for i in 0 1 6; do ln -s ../init.d/rpcbind /etc/rc$i.d/K07rpcbind; done
for i in 2 3 4 5 S; do ln -s ../init.d/rpcbind /etc/rc$i.d/S12rpcbind; done
update-rc.d rpcbind defaults

ASIC Bit Coin Mining

See Bitcoin#Mining

---

Recommended to use an older version on Raspberry Pi:

Initial Setup & Overview | PiMiner Raspberry Pi Bitcoin Miner | Adafruit Learning System - http://learn.adafruit.com/piminer-raspberry-pi-bitcoin-miner/initial-setup-and-assembly

Install Software | PiMiner Raspberry Pi Bitcoin Miner | Adafruit Learning System - http://learn.adafruit.com/piminer-raspberry-pi-bitcoin-miner/install-cgminer

sudo apt-get update
sudo apt-get install libusb-1.0-0-dev libusb-1.0-0 libcurl4-openssl-dev libncurses5-dev libudev-dev

wget http://ck.kolivas.org/apps/cgminer/3.1/cgminer-3.1.1.tar.bz2
tar xvf cgminer-3.1.1.tar.bz2
cd cgminer-3.1.1
./configure --enable-icarus
make

cat > cgminer.conf << EOF
{
    "api-allow": "0/0",
    "api-listen": true,
    "api-port": "4028",
    "expiry": "120",
    "failover-only": true,
    "icarus-options": "115200:1:1",
    "icarus-timing": "3.0=100",
    "kernel-path": "/usr/local/bin",
    "log": "5",
    "no-pool-disable": true,
    "pools": [
        {
            "pass": "[PASSWORD]",
            "url": "http://pit.deepbit.net:8332",
            "user": "[USERNAME]"
        }
    ],
    "queue": "2",
    "scan-time": "60",
    "shares": "0",
    "worktime": true
}
EOF

ls /dev/*USB*

# sudo nohup ./cgminer-3.1.1/cgminer --config /home/pi/cgminer.conf -S /dev/ttyUSB0 -S /dev/ttyUSB1 >/dev/null 2>&1&
sudo nohup ./cgminer --config cgminer.conf -S /dev/ttyUSB0 >/dev/null 2>&1&

---

PiMiner

git clone https://github.com/adafruit/PiMiner.git

Forked to: https://github.com/kiloforce/cgminerminer

git clone https://github.com/kiloforce/cgminerminer.git

Apache

apt-get install apache2 php5

VNC Server

# alias: sudo apt-get install vnc-server
sudo apt-get install tightvncserver
tightvncserver  # set password
vncserver :0 -geometry 1920x1080 -depth 24
vim svnc.sh
#!/bin/sh
vncserver :0 -geometry 1920x1080 -depth 24 -dpi 96
/usr/bin/vncserver :0 -geometry 1280x800 -depth 16 -pixelformat rgb565
vncserver :0 -geometry 1024x768 -depth 16 &

References:

---

/root/.vnc/xstartup

#!/bin/sh

xrdb $HOME/.Xresources
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession

Which looks like it runs LXDE

LXDE - Lightweight X11 Desktop Environment

VNC Desktop

To share the current desktop:

sudo apt-get install x11vnc
# as user 'pi'
x11vnc -display :0

Or if you want vnc server run after login, you can automate with this script:

#!/bin/bash
/usr/bin/x11vnc -nap -wait 50 -noxdamage -passwd PASSWORD -display :0 -forever -o /var/log/x11vnc.log -bg

get that running on GDM in case the machine isn't already logged in:

x11vnc -display :0 -auth /var/lib/gdm/:0.Xauth

From an SSH session, to start an app on the desktop:

export DISPLAY=:0
xterm

References:

Firmware

rpi-update - An easier way to update the firmware of your Raspberry Pi.

Hexxeh/rpi-update - GitHub - https://github.com/Hexxeh/rpi-update

To update your firmware (and kernel), just run the following command:

sudo rpi-update

To upgrade/downgrade to a specific firmware revision, specify its Git hash (from the https://github.com/Hexxeh/rpi-firmware now https://github.com/raspberrypi/rpi-firmware repository) as follows:

sudo rpi-update b62ec22eac11772e3a013a0faedd6d790da23c66

---

Check your firmware version

Using the latest firmware version may help various problems with SD card and display compatibility. Check the kernel version with:

# uname -a
Linux pi-sprinkler 3.6.11+ #538 PREEMPT Fri Aug 30 20:42:08 BST 2013 armv6l GNU/Linux

And the GPU firmware with:

# /opt/vc/bin/vcgencmd version
Sep  1 2013 23:25:25
Copyright (c) 2012 Broadcom
version 4f9d19896166f46a3255801bc1834561bf092732 (clean) (release)

Note, the version that is displayed here will not match the hash downloaded by rpi-update. Not sure why.

---

"The software package called "raspberrypi-bootloader" also contains the firmware. This will be updated by apt-get upgrade.

The rpi-update command will load the latest "cutting edge" version of the firmware. Occasionally this can cause minor problems, and very rarely could cause your Pi to fail to start up. Unless you need the latest version you are probably better off with apt-get upgrade." [23]

--- References:

MPEG-2 DVD License

Raspberry Pi • View topic - Playing DVD movies on the R Pi - http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=45502

How To Add MPEG 2 To Your Raspberry Pi Media Centre - http://www.makeuseof.com/tag/how-to-add-mpeg-2-to-your-raspberry-pi-media-centre/

Raspberry Pi Store - http://www.raspberrypi.com/

about $4 for MPEG-2 license key

MPG2 Decode keys go in /boot/config.txt

decode_MPG2=0x12345678,0xabcdabcd,0x87654321

Testing Codecs to see if they are Enabled [24]

/opt/vc/bin/vcgencmd codec_enabled MPG2
MPG2=disabled

MAME

References:


uinput - Uinput is Linux kernel module which allows attaching userspace device drivers into the Linux kernel. However, its ioctl-interface is pretty low level from an application developer's perspective. This library provides a set of helper functions for making the usage of uinput easier. Libsuinput can be considered thin, because it operates on the same file descriptors as traditional ioctl commands.

Video

omxplayer

omxplayer /pub/Gethsemane_Song_Stories_of_Jesus.mp4
omxplayer -o hdmi /path/to/filename.mp4

can play are H264 or Xvid

Full screen: [25]

omxplayer -r VIDEOFILE
xterm -fullscreen -fg black -bg black -e omxplayer -o hdmi -r VIDEOFILE

Then right click one of your avi files and select open with, then click custom command line tool, type in: [26] xterm -fullscreen -fg black -bg black -e omxplayer -o hdmi -r %f

Omxplayer Key Bindings: [27] [28] [29] [30]

Space or p   Pause/Resume
q            Exit OMXPlayer
z            Show Info (doesn't appear to work)

-            Decrease Volume
+            Increase Volume

i            Previous Chapter
o            Next Chapter

Left Arrow   Seek -30
Right Arrow  Seek +30
Down Arrow   Seek -600
Up Arrow     Seek +600

1            Increase Speed
2            Decrease Speed

j            Previous Audio stream
k            Next Audio stream

n            Previous Subtitle stream
m            Next Subtitle stream
s            Toggle subtitles
d            Subtitle delay -250 ms
f            Subtitle delay +250 ms

handbrake-cli [31]

handbrake-cli -i outDir -o movie.mp4 -e x264 -q 20 -B 160 -t 1
  -q quality
  -B audio compress rate in Kbps
  -t title id to convert
  -e encode format 

References:

you tube

youtube-dl - downloader of videos from YouTube and other sites

apt-get install youtube-dl

Updated self:

youtube-dl -U

Download a video:

youtube-dl http://www.youtube.com/watch?v=vKtwZmhX0lw

Download multiple videos:

youtube-dl -a youtube_links.txt

---

Download video:

youtube-dl http://www.youtube.com/watch?v=6E2hYDIFDIU

Get video title:

youtube-dl --get-title http://www.youtube.com/watch?v=6E2hYDIFDIU 

Extract audio:

ffmpeg -i 6E2hYDIFDIU.flv 6E2hYDIFDIU.wav

Convert to mp3:

lame 6E2hYDIFDIU.wav 6E2hYDIFDIU.mp3

youtube2mp3.sh:

#!/bin/bash 
    # A very simple Bash script to download a YouTube video 
    # and extract the music file from it. 
address=$1 
regex='v=(.*)' 
if [[ $address =~ $regex ]]; then 
  video_id=${BASH_REMATCH[1]}
  video_id=$(echo $video_id | cut -d'&' -f1) 
  video_title="$(youtube-dl --get-title $address)" 
  youtube-dl $address 
  ext="flv" 
  ffmpeg -i $video_id.$ext "$video_title".wav 
  lame "$video_title".wav "$video_title".mp3 
  rm $video_id.$ext "$video_title".wav 
else 
  echo "Sorry but the system encountered a problem." 
fi

-

Play file directly:

youtube-dl -g "http://www.youtube.com/video?v=xyzpdq" | xargs omxplayer -o hdmi

References:

---

GPS

Android: Llama, Tasked Tasker, Locale

--

GPS - BlueNEXT GPS USB dongle

Dream Green House • Features • Raspberry Pi - http://dreamgreenhouse.com/features/rpi/gps/index.php

bluenext.jpg

Referenced:

  • Raspberry Pi Dashcam Project - http://dreamgreenhouse.com/projects/2013/picar/
    • "We have now successfully added a USB GPS module. The Raspberry Pi does not have a clock by default and we are using the GPS dongle to provide an accurate clock. We also have other plans to use the GPS module for speed and location logging. This part is described in our RPi GPS feature. "

COSM / Xively

COSM used to be Pachube, and is now Xively (by LogMeIn).

Overview | Send Raspberry Pi Data to COSM | Adafruit Learning System - http://learn.adafruit.com/send-raspberry-pi-data-to-cosm/overview

"The combination of connecting a Raspberry Pi to COSM makes creating a internet of things much easier than it has been in the past. The Pi with it's easy access to ethernet / WiFi and COSM's drop dead simple usability will graph all sensor data you send to it. This tutorial explains how to connect a analog temperature sensor to the Pi and use a small python script to upload that data for storage and graphing on COSM."

Power Monitoring with hacked Kill-A-Watt

RaspiWatt: discover power consumption using a Kill-A-Watt & Pi - www.raspihub.com/go/393f732cc14546ee0e904c1d434b3568db23dec5eca542961ca32d6317a2a798

rsync

Throttle rsync with: [32]

ionice /usr/bin/rsync --progress [SRC] [DEST]

Serial to USB Converter

TRENDnet TU-S9

[319746.693652] usb 1-1.3.4: new full-speed USB device number 34 using dwc_otg
[319746.819230] usb 1-1.3.4: New USB device found, idVendor=067b, idProduct=2303
[319746.819268] usb 1-1.3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[319746.819287] usb 1-1.3.4: Product: USB-Serial Controller D
[319746.819306] usb 1-1.3.4: Manufacturer: Prolific Technology Inc.
[319746.900332] usbcore: registered new interface driver usbserial
[319746.902466] usbcore: registered new interface driver usbserial_generic
[319746.902639] usbserial: USB Serial support registered for generic
[319746.914086] usbcore: registered new interface driver pl2303
[319746.914803] usbserial: USB Serial support registered for pl2303
[319746.914975] pl2303 1-1.3.4:1.0: pl2303 converter detected
[319746.928766] usb 1-1.3.4: pl2303 converter now attached to ttyUSB0

/dev/ttyUSB0

X10

"The two dominant standards for powerline transmission are Insteon and X10" [33]

References:

heyu

See heyu

mochad

mochad is a Linux TCP gateway daemon for the X10 CM15A RF (radio frequency) and PL (power line) controller and the CM19A RF controller.

echo "pl a1 on" | nc localhost 1099
echo "pl a1 off" | nc locahost 1099

References:

Arduino

Arduino IDE

Menu -> Electronics -> Arduino IDE

  • runs the command '/usr/bin/arduino'

3 Packages:

arduino - AVR development board IDE and built-in libraries
arduino-core - Code, examples, and libraries for the Arduino platform
arduino-mk - Program your Arduino from the command line

Installation:

apt-get install arduino

If you want to be able to run from the command line:

apt-get install arduino-mk
# or
pip install ino

Getting Started

Open the blink example

Open the LED blink example sketch: File > Examples > 1.Basics > Blink.

Arduino1Blink.png

A few seconds after the upload finishes, you should see the pin 13 (L) LED on the board start to blink (in orange). If it does, congratulations! You've gotten Arduino up-and-running.

Arduino Getting Started - Windows - http://arduino.cc/en/Guide/Windows

Arduino UNO

# dmesg
[204411.055236] usb 1-1.3.6: new full-speed USB device number 8 using dwc_otg
[204411.191446] usb 1-1.3.6: New USB device found, idVendor=2341, idProduct=0043
[204411.191479] usb 1-1.3.6: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[204411.191496] usb 1-1.3.6: Manufacturer: Arduino (www.arduino.cc)
[204411.191511] usb 1-1.3.6: SerialNumber: 9523732383435151C091
[204411.261127] cdc_acm 1-1.3.6:1.0: ttyACM0: USB ACM device
[204411.267605] usbcore: registered new interface driver cdc_acm
[204411.267635] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

/dev/ttyACM0

Raspberry Pi vs Arduino

Raspberry Pi and Arduino | Raspberry Pi - http://www.raspberrypi.org/archives/1171

  • "Ultimately, we hope that successful sales of Raspberry Pi will encourage people to buy Arduinos too, and vice versa: the two have what I believe business school-types call “good synergy”."

Raspberry Pi to Arduino Serial Communication

boards_sm.jpg

Arduino Blink Test - When it receives a digit, it flashes the number of times indicated by the digit.

const int ledPin = 13;

void setup()
{
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  Serial.println("Hello Pi");
  if (Serial.available())
  {
     flash(Serial.read() - '0');
  }
  delay(1000);
}

void flash(int n)
{
  for (int i = 0; i < n; i++)
  {
    digitalWrite(ledPin, HIGH);
    delay(100);
    digitalWrite(ledPin, LOW);
    delay(100);
  }
}

There is a Python library for serial communications called 'pySerial' which has history with Arduino.

import serial
ser = serial.Serial('/dev/ttyACM0', 9600)

while 1 :
    ser.readline()

# force a break then test sending...

ser.write('5')

A simple UI with Python and GTK [34]

References:

Pandora Internet Radio

Instructables - Arduino / Raspberry Pi Internet Radio - http://www.instructables.com/id/Arduino-Raspberry-Pi-Internet-Radio/

  • Raspberry Pi runs mpd music player daemon to receive and decode the internet radio stream.
  • ALSA running on the Raspberry Pi provides the sound through either the Jack Socket or the HDMI output.
  • We want to control the Radio from the Buttons on the Arduino and we want to see which Radio Station we're listening to on the LCD display.

--

Note: Pidora - is not what we are looking for!

pianobar

pianobar - console based player for Pandora radio

Install and Configure:

apt-get install pianobar

mkdir -p ~/.config/pianobar

cat > ~/.config/pianobar/config << "EOF"
user = [USERNAME]
password = [PASSWORD]
tls_fingerprint = 2D0AFDAFA16F4B5C0A43F3CB1D4752F9535507C0
autostart_station = 713040038180498234
EOF

# make sure audio is going to audio jack
amixer cset numid=3 1

pianobar

---

Control Piano Bar

mkfifo ~/.config/pianobar/ctl

New song:

echo -n 'n' > ~/.config/pianobar/ctl

Another example:

while true; do;
    nc -l -p 12345 -s localhost localhost > ~/.config/pianobar/ctl;
    sleep 1;
done

echo -ne 'n\x1a' | nc -q 0 127.0.0.1 12345

---

Autostart a station: [36]

autostart_station = 713040038180498234

When you run pianobar, and you select a station it says

|> Station "{station name}" ({station number})

I believe you just copy {station number} and replace 123456 in the example with that.

---

Error about fingerprint:

Get fingerprint: [37]

openssl s_client -connect tuner.pandora.com:443 < /dev/null 2> /dev/null | \
openssl x509 -noout -fingerprint | tr -d ':' | cut -d'=' -f2

Another:

fingerprint=`openssl s_client -connect tuner.pandora.com:443 < /dev/null 2> /dev/null | openssl x509 -noout -fingerprint | tr -d ':' | \
cut -d'=' -f2` && echo tls_fingerprint = $fingerprint >> ~/.config/pianobar/config

---

Finally, enter the following command to make sure audio is routed to the headphone jack rather than the HDMI port (you can skip this step if using a USB audio device):

sudo amixer cset numid=3 1

---

Configuration examples:

---

Wireless Raspberry Pi Radio: Pianobar - Instructables - http://www.instructables.com/id/Wireless-Raspberry-Pi-Radio-Pianobar/

Pandora's Box - An Internet Radio player made with a Raspberry Pi! - Instructables - http://www.instructables.com/id/Pandoras-Box-An-Internet-Radio-player-made-with/

Turning your raspberry pi into a remote Pandora music box, part 1 | Claire Vo Lawless - http://clairevo.com/post/47546482645/turning-your-raspberry-pi-into-a-remote-pandora-music

Issues

handle_hc_chhltd_intr_dma - DMA Mode - ChHltd set, but reason for halting is unknown

[  247.414548] ERROR::handle_hc_chhltd_intr_dma:2592: handle_hc_chhltd_intr_dma: Channel 7,
DMA Mode -- ChHltd set, but reason for halting is unknown, hcint 0x00000012, intsts 0x04400001
[  345.628872] ERROR::handle_hc_chhltd_intr_dma:2592: handle_hc_chhltd_intr_dma: Channel 1,
DMA Mode -- ChHltd set, but reason for halting is unknown, hcint 0x00000012, intsts 0x04400001
[ 5688.587194] ERROR::handle_hc_chhltd_intr_dma:2592: handle_hc_chhltd_intr_dma: Channel 5,
DMA Mode -- ChHltd set, but reason for halting is unknown, hcint 0x00000012, intsts 0x04600001
[ 5764.631908] cp210x ttyUSB3: cp210x_open - Unable to enable UART
[ 5767.213534] cp210x ttyUSB3: cp210x_open - Unable to enable UART
[ 5768.516800] cp210x ttyUSB3: cp210x_open - Unable to enable UART
[ 5771.479220] cp210x ttyUSB2: cp210x_open - Unable to enable UART
[ 5773.653528] cp210x ttyUSB2: cp210x_open - Unable to enable UART

This channel is already in use, continuing anyway

python gpio_test_script.py

RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.

The pins are configured in a bad state at boot. The first time you run any of script using a GPIO pin you will get this error.

At the begging:

#Alerts OFF
GPIO.setwarnings(False)

At the end:

try:
     main
finally:
     GPIO.cleanup()

"It's all to do with Linux "exporting" the gpio to be visible to a user, so an ordinary user can read and write the gpio. The external program should have "unexported" the gpio when it was finished." [38]

Models

View of Model A

Raspberry_Pi_-_Model_A.jpg

View of Model B

http://upload.wikimedia.org/wikipedia/commons/3/3d/RaspberryPi.jpg?breakwiki=.xxx

Remote Desktop Sharing

sudo apt-get install dconf-editor
dconf-editor # as pi user, org -> gnome -> desktop -> remote access -> [ ] encryption
sudo apt-get install vino
vino-preferences

RPi VNC Screen Sharing - eLinux.org - http://elinux.org/RPi_VNC_Screen_Sharing

---


sudo apt-get install vino dconf-editor

# as pi user...
gsettings set org.gnome.Vino require-encryption false
gsettings set org.gnome.Vino prompt-enabled false
gsettings set org.gnome.Vino authentication-methods "['none']"


## sudo su -
## cat > /etc/sudoers.d/vsrv.sh << "EOF"
## #!/bin/bash
## /usr/lib/vino/vino-server
## EOF
## chmod +x /etc/sudoers.d/vsrv.sh
## 
## cat >> /etc/xdg/lxsession/LXDE/autostart << "EOF"
## @/etc/sudoers.d/vsrv.sh
## EOF

sudo su -
cat > /etc/xdg/autostart/vino-server.desktop << "EOF"
[Desktop Entry]
Name=Desktop Sharing
Comment=GNOME Desktop Sharing Server
Exec=/usr/lib/vino/vino-server
Terminal=false
Type=Application
X-GNOME-Autostart-Phase=Applications
X-GNOME-AutoRestart=true
NoDisplay=true
EOF

RPi VNC Screen Sharing - eLinux.org - http://elinux.org/RPi_VNC_Screen_Sharing

Disable pi password warning

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

Solution: [39]

  • remove /etc/profile.d/sshpasswd.sh (now /etc/profile.d/sshpwd.sh)

Disable wifi warning

  • remove /etc/profile.d/wifi-country.sh

Upgrade Jessie to Stretch

apt-get update
apt-get upgrade
apt-get dist-upgrade
dpkg -C
apt-mark showhold
dpkg --audit
dpkg --get-selections | grep hold
sudo rpi-update 
sed -i 's/jessie/stretch/g' /etc/apt/sources.list
grep -lnr jessie /etc/apt  
apt-get update
apt-get --simulate upgrade
apt-get upgrade
apt-get dist-upgrade
apt-get autoremove
apt-get autoclean
rpi-update
cat /etc/os-release
reboot


References:

tmpfs

Extending the life of your Raspberry PI SD Card - Domotic Project

https://domoticproject.com/extending-life-raspberry-pi-sd-card/

4.1 /run and /run/lock
4.2 /dev/shm
4.3 /var and /var/tmp
4.4 /var/log
4.5 /var/www/html
4.6 /var/lib/weewx
4.7 /var/lib/upsd

tmpfs

Extending the life of your Raspberry PI SD Card - Domotic Project

https://domoticproject.com/extending-life-raspberry-pi-sd-card/

4.1 /run and /run/lock
4.2 /dev/shm
4.3 /var and /var/tmp
4.4 /var/log
4.5 /var/www/html
4.6 /var/lib/weewx
4.7 /var/lib/upsd

Under Voltage Warning

hwmon hwmon1: Voltage normalised
hwmon hwmon1: Undervoltage detected!


If the Red Power LED is not illuminated this means the supply voltage is inadequate. (The newer Pi have a well engineered power circuit, and may continue to function even if the input voltage is below spec; the same may not be true of peripherals). The GUI had an rainbow indicator (replaced by a lightning bolt) which comes up in the top right if the voltage is inadequate. This has a 3 second timer, and may display even if the LED appears to be lit.

NOTE the Red Power LED on the Pi3B+ only functions if the SD Card/USB key has up to date firmware because it is controlled by software - it is meaningless otherwise.

-

Check throttled, due to under voltage:

vcgencmd get_throttled
$ vcgencmd get_throttled
throttled=0x50000

$ vcgencmd get_throttled
throttled=0x50005

1110000000000000010
|||             |||_ under-voltage
|||             ||_ currently throttled
|||             |_ arm frequency capped
|||_ under-voltage has occurred since last reboot
||_ throttling has occurred since last reboot
|_ arm frequency capped has occurred since last reboot

-

| Bit | Meaning |
|:---:|---------|
| 0 | Under-voltage detected |
| 1 | Arm frequency capped |
| 2 | Currently throttled |
| 3 | Soft temperature limit active |
| 16 | Under-voltage has occurred |
| 17 | Arm frequency capped has occurred |
| 18 | Throttling has occurred |
| 19 | Soft temperature limit has occurred

The bits represent:

throttled=0x50000
0101 0000 0000 0000 0000
throttled=0x50005
0101 0000 0000 0000 0101
bits 0 & 16 - Under-voltage detected (has occured)
bits 2 & 18 - Currently throttled (has occured)

-

root@mypi:~# vcgencmd get_throttled
throttled=0x50005

The 5 on the left means it has been throttled before (since boot), and the 5 on the right means it is currently throttled.

-

root@mypi:~#  vcgencmd get_throttled
throttled=0x50000

The 5 on the left means it has been throttled before (since boot), and the 0 on the right means it is currently not throttled.

-

root@mypi:~# vcgencmd get_throttled
throttled=0x0

This means it has never throttled (since boot).

-

$ vcgencmd get_throttled
throttled=0x50005


The bits represent:

0101 0000 0000 0000 0101

0: under-voltage
1: arm frequency capped
2: currently throttled 

16: under-voltage has occurred
17: arm frequency capped has occurred
18: throttling has occurred

under-voltage occurs when voltage drops below 4.63V. The Pi is throttled arm frequency capped occurs with temp > 80'C over-temperature occurs with temp > 85'C. The Pi is throttled

Throttling removes turbo mode, which reduces core voltage, and sets arm and gpu frequencies to non-turbo value. Capping just limits the arm frequency (somewhere between 600MHz and 1200MHz) to try to avoid throttling. If you are throttled and not under-voltage then you can assume over-temperature. (confirm with vcgencmd measure_temp).

So 0x50005 means you are currently under-voltage and throttled

Ref: [40]

-

You can not monitor voltage, because the Pi has no analog capability. (You could, of course, add an ADC to monitor the voltage.)

The under-voltage warning is produced by a chip, and is ON or OFF. See Raspberry Pi Power Limitations (http://raspberrypi.stackexchange.com/questions/51615/raspberry-pi-power-limitations) for details.

vcgencmd get_throttled will show the current state. You may be able to write something to monitor this, but AFAIK there is nothing currently available. See the following for detail https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=147781&start=50#p972790

https://raspberrypi.stackexchange.com/a/72473

-

Troubleshooting power problems - https://elinux.org/R-Pi_Troubleshooting#Troubleshooting_power_problems

Test between TP1 and TP2 (test points). You should see a voltage between 4.75 and 5.25 volts

400px-RPI_Test_Points.JPG

Ignore Under Voltage Warnings

https://github.com/raspberrypi/documentation/pull/3064/files
"If the power supply to the Raspberry Pi drops below 4.63V (±5%), the following icon is displayed."
https://www.raspberrypi.com/documentation/computers/legacy_config_txt.html#avoid_warnings
avoid_warnings=2 allows turbo mode even when low-voltage is present.

If you want to live ignorantly, you can disable the on-screen warnings: [1]

/boot/config.txt
  avoid_warnings=1
# still get throttled, but no more on-screen warnings (still displays to console)
$ vcgencmd get_throttled
throttled=0x50005

If you want to live dangerously, you can disable the warnings, and disable throttling:

/boot/config.txt
  avoid_warnings=2
# throttled will give something differently
$ vcgencmd get_throttled
throttled=0x70000

Turbo Mode

force_turbo=1
disable_auto_turbo=1
On Raspberry Pi 2 and 3, setting this flag will disable the GPU from moving into turbo mode, which it can do under particular loads.

Setting any overclocking parameters to values other than those used by raspi-config may set a permanent bit within the SoC. This makes it possible to detect that your Raspberry Pi was once overclocked. The overclock bit sets when force_turbo is set to 1 and any of the over_voltage_* options are set to a value of more than 0. See the blog post on Turbo mode for more information. - https://www.raspberrypi.com/news/introducing-turbo-mode-up-to-50-more-performance-for-free/

force_turbo

Forces turbo mode frequencies even when the ARM cores are not busy. Enabling this may set the warranty bit if over_voltage_* is also set.

Power Save Mode

echo powersave | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
and the higher one with "performance" instead of "powersave"

[2]

Monitoring Power and Thermal Issues

$ vcgencmd measure_clock core
frequency(1)=250000000

$ vcgencmd measure_volts core
volt=1.2000V

$ vcgencmd measure_temp
temp=42.2'C
$ vcgencmd get_throttled
throttled=0x50000

1110000000000000010
|||             |||_ under-voltage
|||             ||_ currently throttled
|||             |_ arm frequency capped
|||_ under-voltage has occurred since last reboot
||_ throttling has occurred since last reboot
|_ arm frequency capped has occurred since last reboot

Ref: https://harlemsquirrel.github.io/shell/2019/01/05/monitoring-raspberry-pi-power-and-thermal-issues.html

vcgencmd commands

List commands:

# vcgencmd commands
$ vcgencmd measure_clock arm && vcgencmd measure_temp && vcgencmd get_throttled
frequency(45)=600064000
temp=36.5'C
throttled=0x0

Running at 600 Mhz


Ref: https://elinux.org/RPI_vcgencmd_usage

Upgrade Raspbian Version

rpi-update
#############################################################
WARNING: This update bumps to rpi-5.4.y linux tree
See: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=269769

'rpi-update' should only be used if there is a specific
reason to do so - for example, a request by a Raspberry Pi
engineer or if you want to help the testing effort
and are comfortable with restoring if there are regressions.

DO NOT use 'rpi-update' as part of a regular update process.

##############################################################
Would you like to proceed? (y/N)

Increase Swap File Size

vim /etc/dphys-swapfile
  CONF_SWAPSIZE=1024

or

sed -i 's/CONF_SWAPSIZE.*/CONF_SWAPSIZE=1024/' /etc/dphys-swapfile
sudo dphys-swapfile setup
sudo dphys-swapfile swapon

keywords