Рубрики
Raspberry Pi

i2c

Команда i2cdetect

Показать доступные адаптеры 
i2cdetect -l 
i2c-0   i2c             2180000.i2c                             I2C adapter
i2c-1   i2c             21b0000.i2c                             I2C adapter



Вывод команды i2cdetect -y 0

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- 18 19 -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: 30 -- -- -- -- 35 -- -- 38 -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- 51 -- -- UU UU -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 

--: Указывает, что по этому адресу на I2C-шине не было обнаружено устройства.
UU: Указывает, что устройство по этому адресу используется ядром (или драйвером) и недоступно для работы через i2c-tools
число (например, 18, 19, 30): Указывает на обнаруженное устройство по этому адресу.

Здесь показаны устройства, обнаруженные на шине 0 I2C. 
Они находятся по следующим адресам:
0x18
0x19
0x30
0x35
0x38
0x51

Адреса 0x54 и 0x55 помечены как UU, что означает, 
что эти устройства уже используются ядром, 
скорее всего драйвером.



Проверьте загруженные модули ядра:
Используйте команду lsmod, чтобы увидеть, какие модули ядра загружены, и попробуйте найти тот, который использует адреса 0x54 и 0x55.

Выключите соответствующие модули:
Если возможно, выгрузите модули ядра, которые используют эти устройства. 

Например:
rmmod имя_модуля

Вернуть модуль ядра: 
modprobe имя_модуля

Команда i2cset

Команда i2cset используется для записи данных в регистр устройства на I2C-шине.
i2cset -y 0 0x54 0x00 0x12 0x34 0x56 0x78 0x9a i
-y: Отключает интерактивный запрос подтверждения (позволяет выполнять команду без подтверждения).
0: Номер I2C-шины (обычно 0 или 1).
0x54: Адрес I2C-устройства.
0x00: Адрес регистра, в который будут записаны данные.
0x12 0x34 0x56 0x78 0x9a: Данные, которые будут записаны в регистр.
i: Указывает, что данные должны быть записаны как последовательность байтов (I2C block write).

Команда i2cget

Команда i2cget используется для чтения данных из регистра устройства на I2C-шине.

i2cget -y 0 0x54 0x00 i 5
-y: Отключает интерактивный запрос подтверждения.
0: Номер I2C-шины.
0x54: Адрес I2C-устройства.
0x00: Адрес регистра, из которого будут прочитаны данные.
i: Указывает, что чтение будет выполнено как последовательность байтов (I2C block read).
5: Количество байтов для чтения.

Стирание данных

i2cset -y 0 0x54 0x00 0x00 0x00 0x00 0x00 0x00 i
i2cset -y 0 0x54 0x05 0x00 0x00 0x00 0x00 0x00 i


Стирание большого объёма данных баш скрипт
-------------------------------
#!/bin/bash

DEVICE_ADDRESS=0x54
START_REGISTER=0x00
BLOCK_SIZE=16  # размер блока данных для стирания за раз

# Цикл для записи нулей по всем регистрам
for ((i=0; i<256; i+=BLOCK_SIZE)); do
  i2cset -y 0 $DEVICE_ADDRESS $((START_REGISTER + i)) $(printf '0x00%.0s' $(seq 1 $BLOCK_SIZE)) i
done
-------------------------------

Частный случай записи в eprom

# выгрузили модуль ядра
 rmmod at24


#конвертация ASCII-кодов
echo -n "bs04" | od -An -t x1
# ASCII-кодов
printf "x62x73x30x34" | echo -e $(cat -)

# пример записи в bs04
#i2cset -y 0 0x54 0x00 0x62 0x73 0x30 0x34 i

#через звездочку удалять не стоит  может будущем аукнутся 
rm /var/lib/nexuscli/access_token
rm /var/lib/nexuscli/device_id
rm /var/lib/nexuscli/refresh_token

#вот так можно прочитать 
i2cget -y 0 0x54 0x00  i 6

#загрузили модуль ядра
modprobe at24


Рубрики
Raspberry Pi

Linux Driver for USB WiFi / Realtek / RTL8811CU / RTL8821CU / RTL8821CUH / RTL8731AU / Access Point / RaspAP / 80211

Ссылки:

https://habr.com/ru/sandbox/131693/ полезная статья по драйверу
https://github.com/morrownr/8821cu-20210916 
https://github.com/fastoe/RTL8811CU_for_Raspbian
https://github.com/brektrou/rtl8821CU
https://github.com/gglluukk/rtl8188eus
https://github.com/Mange/rtl8192eu-linux-driver
https://github.com/aircrack-ng/rtl8812au
https://github.com/Mange/rtl8192eu-linux-driver
https://github.com/clnhub/rtl8192eu-linux


rpi
https://ru.wikipedia.org/wiki/Raspberry_Pi
https://forums.raspberrypi.com/viewtopic.php?t=344895
https://github.com/liushm/rtl8821CU
https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2024-03-15/2024-03-15-raspios-bookworm-arm64-lite.img.xz
https://github.com/FancyPixel/rtl8821cu
https://github.com/morrownr/8821cu-20210916

AP 
https://habr.com/ru/articles/761852/
https://raspap.com/
https://docs.raspap.com/

Для raspbery pi получаем самые последние сорцы ядра:

apt install -y bc git dkms build-essential raspberrypi-kernel-headers
wget https://raw.githubusercontent.com/RPi-Distro/rpi-source/master/rpi-source -O /usr/local/bin/rpi-source 
chmod +x /usr/local/bin/rpi-source && /usr/local/bin/rpi-source -q --tag-update
rpi-source

Сборка драйвера:

!!! kernel linux < 6
!!! прочтите инструкции в файле README.md
!!! cat README.md
Ставим необходимы пакеты:
apt-get install dkms
dkms status
git clone https://github.com/brektrou/rtl8821CU.git
cd rtl8821CU
Выполняем установку
./dkms-install.sh
dkms status

Удаление драйвера установленного через DKMS

Проверяем что там у нас установлено используем команду "dkms status ":
dkms status 
rtl8821cu, 5.12.0.4: added
rtl8821CU, 5.4.1: added
Удаляем ( rtl8821cu/5.12.0.4):
dkms uninstall rtl8821cu/5.12.0.4
dkms remove rtl8821cu/5.12.0.4 --all

8821cu-20210916 RPI 3B+

https://github.com/morrownr/8821cu-20210916?tab=readme-ov-file

Ставим пакеты для сборки:
apt install -y bc git dkms build-essential raspberrypi-kernel-headers
wget https://raw.githubusercontent.com/RPi-Distro/rpi-source/master/rpi-source -O /usr/local/bin/rpi-source 
chmod +x /usr/local/bin/rpi-source && /usr/local/bin/rpi-source -q --tag-update

Качаем драйверы:
cd /opt
git clone https://github.com/morrownr/8821cu-20210916

Устанавливаем драйвер
!!! В Makefile уже установлена авто определения драйвера.
cd 8821cu-20210916/
make -j4
./dkms-make.sh 
./install-driver.sh 

AP

https://habr.com/ru/articles/761852/
https://raspap.com/

sudo apt-get update
sudo apt-get full-upgrade
sudo reboot
curl -sL https://install.raspap.com | bash


Username: admin
Password: secret

Рубрики
Raspberry Pi

raspberry pi / raspbian / vlan

apt install vlan
systemctl disable dhcpcd.service 



Include files from /etc/network/interfaces.d:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 10.10.10.143
    netmask 255.255.255.0
    network 10.10.10.0
    gateway 10.10.10.1


#auto eth0:1
#iface eth0:1 inet dhcp

auto eth0.100
iface eth0.100 inet static 
         vlan-raw-device eth0
           address 10.100.1.15
           netmask 255.255.255.248

auto eth0.101
iface eth0.101 inet static 
         vlan-raw-device eth0
          address 10.22.21.161
          netmask 255.255.255.240


#static route
up ip ro add 50.50.160.10/32 via 10.10.10.254

Ссылки:

https://raspberrypi.stackexchange.com/questions/85408/raspbian-stretch-routing-vlan
https://raspberrypi.stackexchange.com/questions/85408/raspbian-stretch-routing-vlan
https://itc-life.ru/kak-dobavit-marshrut-v-linux-static-routes/

http://jodies.de/ipcalc

### mask
#255.255.255.255   #/32
#255.255.255.252   #/30 
#255.255.255.248   #/29
#255.255.255.240   #/28
#255.255.255.224   #/27
#255.255.255.0     #/24
#255.255.0.0       #/16
#255.0.0.0         #/8
Рубрики
Raspberry Pi

pi zero / подключаемся через компорт / COM port / serial / usb over com

ссылки

https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget?view=all
https://raspberrypi.ru/619-raspberry-pi-zero-kak-usb-ustroystvo-chast-1-posledovatelnyy-interfeys

Решение

0. получаем доступ к загрузочному разделу /boot

1. создаем пустой текстовый файл с именем  ssh 

2. в файле cmdline.txt в конец стоки после rootwait дописываем modules-load=dwc2,g_serial
вот так вот бует:
console=serial0,115200 console=tty1 root=PARTUUID=738a4d67-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_serial

3. в файле config.txt в конец пишем dtoverlay=dwc2
вот так вот
...
[all]
#dtoverlay=vc4-fkms-v3d
dtoverlay=dwc2

4. дело за малым, каким то чудесным образом попасть на pi zero и выполнить следующие команды:
systemctl enable getty@ttyGS0.service
systemctl start getty@ttyGS0.service
systemctl is-active getty@ttyGS0.service

Рубрики
Raspberry Pi

pi zero / настройка используя USB (не PWR_IN) / ssh over usb

http://c3bo.ru/podkljuchenie-raspberry-pi-zero-k-kompjuteru-s-pomoshhju-usb-kabelja/
Raspberry Pi Zero W Headless setup – Windows 10 RNDIS Driver issue resolved
https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget/ethernet-gadget https://rootnix.net/posts/raspberry_usb_ethernet/ http://web1.moddevices.com/shared/mod-duo-rndis.zip - драйвер RNDIS GADGET для windows 10

Настройка

0. нужно подготовить raspbian
1. Редактируем файл cmdline.txt
nano  /mount_point_SD/boot/cmdline.txt
добавить после rootwait подключение Ethernet модулей
--------------------------------------
modules-load=dwc2,g_ether
--------------------------------------

2. Редактируем файлы config.txt
nano  /mount_point_SD/boot/config.txt
добавить в конец файла
--------------------------------------
dtoverlay=dwc2
--------------------------------------

3. Подключение 
!!! На плате два микро usb входа. Подписаны они USB и PWR_IN
!!! Подключать надо только USB. Питание raspberry получит из него
!!! без драйвера RNDIS на windows10 не заработает
!!! без настрое ip не будет интернета
ssh raspberrypi.local

pi zero использования интернета хоста при подключение через usb

Pi zero клиент
0. редактируем файл/etc/dhcpcd.conf и добавляем в конец настройки
!!! Почему /etc/network/interfaces ?! потому что были проблемы с usb клавиатурой. 
nano /etc/dhcpcd.conf
---------------------
#usb0
profile static_usb0
static ip_address=192.168.254.254/24
static routers=192.168.254.1
static domain_name_servers=192.168.254.1
interface usb0
fallback static_usb0
--------------------
1. Нужно настроить маршрут по умолчанию
route add default gw 192.168.254.1 

ПК хост
0. Хосту нужно назначить IP-адрес для интерфейса RNDIS GADGET 
192.168.254.1/24
1. Включить маршрутизацию (для windows "разрешить общий доступ подключения к интернету для компьютеров в сети")
 


Рубрики
Raspberry Pi

rasppberry pi \ включение ssh \ raspbian

0. Подключаем sd карту с raspbian к ПК

1. Открываем раздел /boot который в FAT32 на sd карте 

2. Создаем пустой файл ssh 
touch /mount_point_SD/boot/ssh
Рубрики
Raspberry Pi

rasppberry pi / пароль по умолчанию / default password


0. Вот такой
Username: pi
Password: raspberry

1. при установке ввели какой то свой вспоминайте =) 

2. если загрузилось гуи открываем терминал меняем так 
sudo raspi-config 

3. или так sudo passwd 
Рубрики
Raspberry Pi

rasppberry pi / звук / sound

источник:

http://www.armlinux.ru/%D0%BD%D0%B5%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8-raspberry-pi-%D0%B8-%D0%B1%D0%BE%D1%80%D1%8C%D0%B1%D0%B0-%D1%81-%D0%BD%D0%B8%D0%BC%D0%B8/

настройки:

по умолчанию, выход звука определяется автоматически (т.е. HDMI, если устройство способно проигрывать звуки, в остальных случаях выход наушников). 
Однако, выход звука можно указать вручную:
sudo amixer cset numid=3 
где n=0 — автоматический режим, n=1 — наушники, n=2 — hdmi.

Для проверки наличия звука удобно использовать программу hello_audio. 
В свежих выпусках прошивок Raspberry Pi для компиляции программы введите следующие команды:

 cd /opt/vc/src/hello_pi/
 ./rebuild.sh
 cd hello_audio

На более старых прошивках программа компилируется так:
 cd /opt/vc/src/hello_pi/hello_audio
 make
После завершения компиляции, можно запустить программу для проверки аналогового выхода (наушников):
 ./hello_audio.bin
или:
 ./hello_audio.bin 1
Рубрики
Raspberry Pi

Raspberry Pi / tools

miniFAQ:

http://raspberrypi.org/qsg - гайд
https://www.tomshardware.com/reviews/raspberry-pi-headless-setup-how-to,6028.html

пароли rasbian:

login: pi
password: raspberry

комманды:

sudo su - получить root
sudo apt-get install rpi-update - установить пакет rpi-update 
rpi-update - обновление модуле pi (камеры Rpi Camera Module и тд) 
uname -a - узнать все о дистрибутиве *.nix
sudo apt-get update - обнавить список репазиториев
sudo apt-get upgrade - обнавить паеты 
apt-get dist-upgrade - обновить дистрибутив
sudo reboot - перезагрузка
raspi-config - настройка малины
raspistill -o image.jpg - сделать скриншот с камеры
raspivid -o video.h264 - сделать видео запись с камеры
raspivid -o video.h264 -t 10000 - сделать видео запись с камеры
raspivid -o video.h264 -t 10000 -d - сделать видео запись с камеры
startx - включение X-Windows

репазитории:

http://raspbian.org/RaspbianMirrors - репазитории

сеть:

nano /etc/network/interfaces
--------------------------------------------
iface lo inet loopback
iface eth0 inet static
address 192.168.1.150
netmask 255.255.255.0
gateway 192.168.1.1
--------------------------------------------
Перезапуск сети:
/etc/init.d/networking stop
/etc/init.d/networking start
--------------------------------------------
Проверка:
ping 192.168.1.150
--------------------------------------------

монтирование FS:

Файловая система смонтирована только для чтения, перемонтируем ее для записи:
# mount -o remount,rw /dev/mmcblk0p1 /mnt

Noobs:

Удаляем все дистрибутивы кроме Raspbian
Оставляем единственный вариант установки Raspbian в /mnt/os/Raspbian/flavours.json
cd /mnt/os
rm -r Arch/ Pidora/ RaspBMC/ data_partition/ OpenELEC/ RISC_OS/

nano /mnt/os/Raspbian/flavours.json 
{
  "flavours": [
    {
      "name": "Raspbian",
      "description": "A Debian wheezy port, optimised for the Raspberry Pi",
      "feature_level": 123900
    }  
  ]
}

удаленно подключение с помощью realvnc :

Удаленно подключение с помощью realvnc (бесплатна для raspberry)
https://www.realvnc.com/raspberrypi/ - о лицензии
https://www.realvnc.com/download/viewer/ - тут можно скачать viewer
Установка на pi
apt-get install realvnc-vnc-server

еще VNC:

------------------------------------------
apt-get install tightvncserver
vncserver
------------------------------------------
Tight VNC Login
192.168.1.150:1
------------------------------------------
nano /etc/init.d/tightvncserver
chmod 755 /etc/init.d/tightvncserver
------------------------------------------
#!/bin/sh
# /etc/init.d/tightvncserver
VNCUSER='pi'
case "$1" in
    start)
        su $VNCUSER -c '/usr/bin/tightvncserver :1'
        echo "Starting TightVNC Server for $VNCUSER "
        ;;
    stop)
        pkill Xtightvnc
        echo "TightVNC Server stopped"
        ;;
    *)
        echo "Usage: /etc/init.d/tightvncserver {start|stop}"
        exit 1
        ;;
esac
exit 0
------------------------------------------
/etc/init.d/tightvncserver start
/etc/init.d/tightvncserver stop
update-rc.d tightvncserver defaults
------------------------------------------

minicom подключение rs232

sudo apt-get install minicom - установка
dmesg | grep tty - смотрим доступные кансоли (у usb-rs232 увидим устройство /dev/ttyUSB0) 
sudo minicom -s - настраиваем minicom (настраиваем порот жмем A и для usb-rs232 пишем  /dev/ttyUSB0 (вместо /dev/tty8))
minicom - подключаемся

Подключение к порту Prolific PL-2303 в Linux

sudo screen /dev/ttyUSB0 115200
Рубрики
Raspberry Pi

rasppberry pi / скрипт установки драйвера TP-Link TL-WN725N

ссылки:

http://tech.enekochan.com/en/2014/03/08/new-script-to-compile-tp-link-tl-wn725n-version-2-lwfinger-driver-in-raspbian/

установка драйвера:

#!/bin/bash
# Get linux source code, prepare config files and create symlinks
VERSION=uname -r | awk -F'.' '{print $1"."$2}'
cd ~
wget https://codeload.github.com/raspberrypi/linux/tar.gz/rpi-${VERSION}.y -O rpi-${VERSION}.y.tar.gz
sudo tar zxf rpi-${VERSION}.y.tar.gz -C /usr/src/
cd /usr/src/linux-rpi-${VERSION}.y/
sudo bash -c "zcat /proc/config.gz > /usr/src/linux-rpi-${VERSION}.y/.config"
# In the next step you may be prompted questions about the configuration
# if your /proc/config.gz does not answer them (new features for example)
sudo make oldconfig
sudo make modules_prepare
sudo wget https://github.com/raspberrypi/firmware/raw/master/extra/Module.symvers
sudo ln -s /usr/src/linux-rpi-${VERSION}.y /lib/modules/uname -r/source
sudo ln -s /usr/src/linux-rpi-${VERSION}.y /lib/modules/uname -r/build
# Optional
#sudo ln -s /usr/src/linux-rpi-${VERSION}.y /usr/src/linux-uname -r
#sudo ln -s /usr/src/linux-rpi-${VERSION}.y /usr/src/linux

# Get driver source, compile, install and load it
cd ~
git clone https://github.com/lwfinger/rtl8188eu.git
cd rtl8188eu
# This wil take around 20 minutes
make all
sudo make install
# After this step you should have those new files installed:
# /lib/modules/uname -r/kernel/drivers/net/wireless/8188eu.ko
# /lib/firmware/rtlwifi/rtl8188eufw.bin
sudo modprobe 8188eu

# Remove driver and linux source code to recover some space (around 700MB)
# Leave those lines commented if you want to keep the code for future compilations
#sudo rm /lib/modules/uname -r/source
#sudo rm /lib/modules/uname -r/build
#sudo rm /usr/src/linux-uname -r
#sudo rm /usr/src/linux
#sudo rm -R /usr/src/linux-rpi-${VERSION}.y
#cd ~
#rm rpi-${VERSION}.y.tar.gz
#rm -R rtl8188eu

Рубрики
Raspberry Pi

raspberry pi / Windows 10 IoT Core


Админка Default
http://Device_IP:8080
Username: Administrator 
Password: p@ssw0rd

ссылки:

https://habrahabr.ru/post/283184/
https://habrahabr.ru/company/microsoft/blog/265615/
https://geektimes.ru/post/255100/
https://developer.microsoft.com/ru-ru/windows/iot/win10/tools/DevicePortal.htm
https://msdn.microsoft.com/ru-ru/mt718101.aspx
http://winitpro.ru/index.php/2016/02/09/ustanovka-windows-10-iot-core-na-raspberry-pi-2/
http://developer.telerik.com/featured/a-guided-tour-of-windows-10-iot-core/
Рубрики
Raspberry Pi

raspberry pi / AndroidTV and Android7

ссылки:


http://4pda.ru/2016/11/10/328975/  - openGapps
http://4pda.ru/2016/06/06/302545/ - adroid tv
http://raspberrypi.ru/blog/629.html - android tv и android
https://forum.xda-developers.com/raspberry-pi/development - Cyanogenmod
https://git.embedded.rwth-aachen.de/rtandroid/downloads/raspberry-pi/
http://4pda.ru/forum/index.php?showtopic=308317
http://www.chromiumosforsbc.org/download/

apps2fire:


apps2fire - приложение для телефона на android. 
С помощью этого приложения можно устанавливать приложения на androidtv.

GAPPS:

Установка GAPPS
Не относится к AndroidTV
1. Ставим ADB.
2. Включаем отладку по USB и смотрим ip адрес (About Tablet/Status)
3. Качаем GAPPS (Например с opengapps.org)
4. Извлекаем в любое место папку system(в Windows извлекаем в папку с ADB)
5. Открываем консоль (если Windows то в папке с adb) и пишем:
adb connect ваш_ip
потом
adb remount
6. Затем пишем:
adb push директория/system /system
7.
Пишем:
adb reboot

GAPPS:

Установка GAPPS
Установка .apk
Не относится к AndroidTV
1. Ставим ADB.
2. Включаем отладку по USB и смотрим ip адрес (About Tablet/Status)
3. Подключаемся:
adb connect ваш_ip
4. Переходим в директорию с .apk файлами(В Windows нужно сбросить все файлы в папку с ADB)
5. Пишем команду:
adb install название.apk
Рубрики
Raspberry Pi

raspberry pi / NOOBS


0) Качаем 
SD Formatter 4.0 
ссылка https://www.sdcard.org/downloads/formatter_4/

Noobs 
ссылка https://www.raspberrypi.org/downloads/noobs/
1) Форматируем флешку програмой SDFormated
2) Копируем содержимое архива NOOBS в корень флешки
Рубрики
Raspberry Pi

raspberry pi / Lakka / эмулятор приставок


Lakka - эмулятор приставок для raspberry pi
root:root - пароль по умолчанию (default password)
http://www.lakka.tv/ - официальный сайт
http://www.lakka.tv/doc/Input-settings/ - джойстик
ssh включается в настройках
игры берем с трекеров в интернете

Рубрики
Raspberry Pi

raspberry pi / не исправности / ошибки / индикация

Ссылки:

http://www.armlinux.ru - много всего про Pi

Индикация:

act зеленый - светится если видит сд карту
pwr красный - подключено питание 3,3 Вольта
fdx зеленый - полный DUPLEX
lnk зеленый - сеть активна
100 желтый - 100 Мбит/с

Проблемы с питанием:

0) Проблемы с питанием или в момент включения
1) Красный индикатор не горит, нет изображения на экране
2) Красный индикатор мигает
3) Молния
4) Выключается или перезагружается сразу после загрузки

Качественный источник питания — самый главный залог отсутствия проблем! 

Проблемы с загрузкой образа:

0) Красный индикатор горит, зеленый не мигает, нет изображения на экране (Скорее всего не исправна SD-карта)
1) Зеленый индикатор мигает в определенном порядке  
    3 вспышки: loader.bin не найден
    4 вспышки: loader.bin не загружается
    5 вспышки: start.elf не найден
    6 вспышки: start.elf не загружается
2) Появляется только разноцветный квадрат на экране
3) Ошибка Kernel Panic при загрузке (скорее всего проблема с USB устройством клавиатура, мышь, кардридер, USB WiFi и т.д)

Записать нормальный образ!
Рубрики
Raspberry Pi

rasbian

rasbian:

Стандартный дистрибутив для pi (основан на debian)
Raspberry Pi headless - режим работы без монитора

sudo

sudo - повышение привилегий пользователя. 
sudo - рекомендуется использовать для повседневных задачь

raspi-config:

sudo raspi-config - первоначальная настройка pi
 expand rootfs - использовать весь объем sd-карты
 overscan - подогнать размер экрана (использовать не рекомендуют)
 keyboard - настроить клавиатуру (решить баги с неправильными символами . , / |)
 password - смена стандартного пароля raspberry
 change locale - смена языка и региона (русский ru_RU.UTF-8)
 change timezone - смена часовой зоны
 memory split - память GPU и CPU (рекомендуют по умолчанию)
 overclock - разгон CPU
 ssh - вкл\выкл ssh
 desktop behavior - вкл\выкл рабочего стола X (вкл по умолчанию) (startx)
 Update - установить обновления из интернета

команды питания:

sudo shutdown -h now - выключение
sudo poweroff - выключение
sudo reboot - перезагрузка

информация об железе pi:

cat /proc/version - узнать версию ОС
cat /proc/cpuinfo - информация о CPU = для pi узнать версию платы

папки:

/ - корень
/bin - программы и команды доступные всем пользователям
/boot - файлы нужные для загрузки системы
/dev - хранит файлы, ассоциированные с подключенными устройствами
/etc - файлы с настройками
/etc/init.d - скрипты позволяющие запускать сервисы
/etc/X11 - файлы настроек доя X11
/home - домашние директории пользователей
/home/pi - каталог пользователя pi
/lib - модули и драйверы ядра системы
/media - точка монтирования подключаемых устройств (USB флешка)
/proc -  виртуальная директория, содержит файлы, информация об устройствах и о ситеме в целом
/sbin - программы для root
/sys - спец директория pi. бортовое железо платы
/tmp - хранилище временных файлов
/usr - программы и данные доступные всем пользователям
/usr/bin - большинство программ хранится здесь
/usr/games - игры
/usr/lib - стандартные библиотеки для программ
/usr/local - софт специфичный для данной машины
/usr/sbin - программы для root
/usr/share - различные файлы к которым программы предоставляют доступ (иконки шрифты и тд)
/usr/src - исходный код программ
/var - журналы,логи много всего что генерирует система
/var/backups - резервные копии системных файлов
/var/cache - кеш программ (браузер,apt-get)
/var/log - логи программ
/var/mail - сообщения почты
/var/spool - данные которые ожидают обработки (письма,очередь на печать)

послушать ядро системы ;)

sudo cat /boot/kernel.img | aplay - послушать ядро системы ;)

поиск:

grep puzzle */* - мощный инструмент для поиска
find / -name file.name - поиск
locate file.name - поиск файлов по базе
whereis file.name - поиск файла (применяют к установленным программам)
which file.name - поиск файла (применяют к установленным программам)

процессы:

ps -uax | less - показать процессы
kill 95689 - завершить процессы
htop - консольный диспетчер процессов

права на файлы:

u - пользователь
g - группа
o - остальные
a - все
r - чтение 4
w - запись 2 
x - выполнение 1
+ - добавить
- - убрать

ls -l file.name - показать файлы и права

sudo chown pi garly.txt - смена владельца файла
sudo chgrp staff plug.txt - смена группы у файла
sudo chmod 777 file - смена прав на файл
sudo chmod rwx+a file -  смена прав на файл
sudo chmod rwx+ugo file -  смена прав на файл

время:

на pi по умолчанию установлен ntp client и время само синхронизируется
date -R  - проверить текущее время и часовой пояс 
date x:xx - установить время
date 041217002007.00* - установить системные дату и время ММДДЧЧммГГГГ.СС (МесяцДеньЧасМинутыГод.Секунды)

снимок экрана / screenshots:

sudo apt-get install scrot - установка программы  для ccreenshot/снимка_экрана
Рубрики
Raspberry Pi

python введение

python 2.7 — 3.x:

Python - один из любимых языков программирования для pi у пользователей

IDLE:

IDLE -  среда разработки
IDLE 3 - на рабочем столе IDLE для pi на рабочем столе ( rasbian малинка/programming/python3(IDLE) )

IDLE пример использования:

>>> - интерактивное приглашение
>>> print("hello world!") 
>>> 3+1+2 - мат действия
>>> import math - подгрузили модуль math
>>> (1 + math.sqrt(5)) / 2 - мат действия

для объявления переменной используется =
math.pi - число pi
>>> import math
>>> radius = 200
>>> radius * 2 * math.pi

help() - помощь по команде
>>> help("print") - помощь по команде print
>>> help("topics")
>>> help("keywords")
>>> help("modules")

скрипты:

python run_script.py - выполнение скриптов в bash/cmd

комментарии:

/* комментарий */ - многостраничный комментарий
# - одно строчный комментарий

стиль скриптов:

setup/loop стиль - характерен для arduino и также используется в python
setup() функция - запускается один раз
loop() функция - бесконечный цикл

стандартный шаблон:

# Главный блок программы

# Один раз выполняем setup(), а loop() выполняем по кругу
setup()
while True:
    loop()
#

пример скрипта:

!!! ctrl + c - прервать выполнение 
!!! В python важно следить за пробелами
!!! так же важно использовать заглавные буквы где это требует команды (например True)

# Setup (настройка)
n = 0

# пример первого скрипта
# Loop ( Основной цикл)
while True:
   n = n + 1
   # Оператор % возвращает остаток от деления
   if ((n % 2) == 0):
       print(n) 


пример скрипта:

# Объявляем глобальные переменные
# Переменная n объявлена как глобальная
# Это значит, что она доступна из любой части скрипта
# global в начале каждой функции важен. Так интерпретатор понимает, 
# что нужно использовать глобальную переменную n (а не создавать новую)
n = 0

# Функции setup
# Здесь мы объявили функцию  setup() но не выполняем ее
def setup():
    global n 
    n = 100

# Функции loop
# Таким образом объявляем функцию loop()
def loop():
    global n
    n = n + 1 
    if ((n % 2) == 0):
        print(n)

зарезервированные слова в python (всего 34 шт):

Логика:if, else, elif, not, or, and, is, True, False, None

Циклы: for, in, while, break, as, continue

Штатные функции: print, pass, dell

Классы, модули, функции: class, def, global, lambda, nonlocal, yield, import, return, from

Обработка ошибок: try, except, finally, raise, assert, with

Все что не является зарезервированным словом в python можно считать объектом.
Строки, списки, функции, модули, числа - это все объекты.
Для доступа к объектам используется точка (.)

пример использования зарезервированных слов:


Пример:
>>> myString = "quux"
>>> myString.capitalize()  # сделает первую букву в строке заглавной
'Quux'

Пример:
>>> myList = ['a', 'man', 'a', 'plan', 'a', 'canal']
>>> myList.reverse() # разворот строки
>>> print(myList)
[ 'canal', 'a'............ ну и т.д..

Импорт (подключение библиотек/модулей):

!!! Строки и списки встроены в стандартную библиотеку python (capitalize,reverse) 
!!! Стандартная библиотека всегда включена ее подключать не нужно.
!!! Для подключения дополнительных библиотек используется команда import

import time - добавить библиотеку работы со временем
import time as myTime - добавить библиотеку time и использовать под другим именем myTime
from time import clock - добавить из модуля time только функции clock

Пример импорта(datetime, sleep, time):

# раз в секунду выводим время
# !!! в python все пробелы очень важны. запомни.
from datetime import datetime
from time import sleep

while True:
      now = str(datetime.now())
      print(now)
      sleep(1) 

Запись в файл(datetime, sleep, time, random):

!!!При работе с текстовыми файлами используются строки str()
!!!int() преобразует строку обратно, в число

# Пример записи в файл
from datetime import datetime
from time import sleep
import random

log = open("log.txt", "w")

i=1

while i in range(5):
    now = str(datetime.now())
    # Генерируем случайное число в диапазоне от нуля до 1024
    data = random.randint(0, 1024)
    log.write(now + " " + str(data) + "\n")
    print(".") 
    sleep(0.9) 
log.flush()
log.close

Пример чтение файла и вывод на экран(sys):

# python3 ReadFile.py имя-файла 
# Открываем и читаем файл
import sys

if (len(sys.argv) != 2):
   print("Usage: python ReadFile.py filename")
   sys.exit()

scriptname = sys.argv[0]
filename = sys.argv[1]

file = open(filename, "r")
lines = file.readlines()
file.close()

for line in lines:
    print(line)

Дополнительные модули python:

http://pypi.python.org/pypi - наиболее полный список модулей
RPi.GPIO - контакты общего назначения - пакет python-rpi.gpio
Pygame - фреймворк для игр - пакет python-pygame
SimpleCV - простой API компьютерного  зрения ( работа с камерой в pi)
Scipy - научные вычисления - python-scipy
Numpy - вычисления - python-numpy
Flask - микрофреймворк веб-разработки - python-flask
Requests - http для людей - python-requests
PIL - обработка изображений - python-imaging
wxPython - GUI-фреймворк - python-wxgtk2.8
PySerial - доступ к последовательным портам - python-serial
PyUSB - FTDI-USB интерфейс   

Установка дополнительных модулей

sudo atp-get install python-serial - вот так ставится большинство модулей
python setup.py install - есть вариант и такой установки
pip - менеджер пакетов из pip-installer.org упрощает установку из PyPI

Отлов ошибок:

IDLE меню debug вам в помощь
Семантическая ошибка - это когда программа написана правильно, но работает не так, как задумывалось.
используйте функцию print() доходит ли до определенной части программы
используйте функцию print() что бы узнать значения переменных
проверяйте пробелы
синтаксическая ошибка могла возникнуть раньше чем показывает интерпретатор
проверяйте глобальные и локальные переменные
проверьте скобки. у всех есть пара?
проверяйте математику 3 + 4 * 2 не равно (3 + 4) * 2
Обратите внимание есть модули code и logging при их осваивании находить ошибки станет еще легче
http://stackoverflow.com - сборник коллективных знаний
Рубрики
Raspberry Pi

python Pygame

Основное:

Каждый пиксель поверхности представлен виде трех восьми битных RGB-чисел (от 0 до 255)
(красны, зеленый, синий, прозрачность)
(255, 255, 255) - без прозрачности
(0, 255, 0, 127) - зеленый 50% прозрачности

Окно - главная поверхность, на которой рисуются остальные поверхности.
Поверхности всегда имеют прямоугольную форму.

pygame.dysplay - модуль управление и информация об окне
set_mode() - функция создает окно
update() - функция перерисовывает сцену каждый раз

pygame.image - модуль управления картинками
load() - загрузить картинку из файла и отобразить ее на поверхности окна

blit() - отобразить картинку (после создания окна)

pygame.transform - модуль вращение и изменения размера картинок

pygame.surfarray - доступ к отдельным пикселям

pygame.mask - использование маски из другой поверхности

pygame.draw - рисование кругов, прямоугольников, линий, квадратов и т.д.

pygame.gfxdraw - экспериментальный модуль рисования

pygame.font -вывод на экран текста

Дополнительные шрифты:

sudo apt-get install ttf-mscorefonts-installer - дополнительные шрифты
sudo apt-get install ttf-liberation - дополнительные шрифты

Пример поверхности в pygame:

import pygame

pygame.init()
screen = pygame.display.set_mode((450, 450))
background = pygame.image.load("background.png") #загружаем фоновую картинку (должна быть в директории скрипта)
background.convert_alpha() #формат поверхности погоняется под размеры текущего окна
screen.blit(background, (0, 0)) #по умолчанию фон черный, он объединяется с картинкой
while true:
    pygame.display.update()

Пример объединяем две картинки:

import pygame

pygame.init()
screen = pygame.display.set_mode((450, 450))
bg = pygame.image.load("background.png").convert_alpha() #загружаем фоновую картинку 1 
theremin = pygame.image.load("theremin.png").convert_alpha() #загружаем фоновую картинку 2
screen.blit(bg, (0, 0)) 
screen.blit(theremin, (135, 50))
while true:
    pygame.display.update()

Узнаем какие шрифты установлены:

import pygame

pygame.init()
for fontname in pygame.font.get_fonts():
     print fontname

Вывод на экран текста:

import pygame

pygame.init()
screen = pygame.dysplay.set_mode((725, 92))
font = pygame.font.SysFont("freeserif", 72, bold = 1 ) # используем шрифт freeserif размер 72, жирный
textSurface = font.render("1 Theremin Per Child!", 1,
                          pygame.Color(255, 255, 255)) #белый текст "1 Theremin Per Child!"
screen.blit(textSurface, (10, 10))
while True:
      pygame.display.update()

Дополнительно:

pygame еще может много. 
например воспроизводить аудио и видео, спрайты, управление и т.д.

/usr/share/pyshared/pygame/examples - примеры

http://pygame.org/docs/ - документация
Рубрики
Raspberry Pi

raspberry pi / tools / осмотр:)

Информация общая:

cat /proc/version - показывает, какую версию linux вы используете (Centos\debian\rasbian\ubuntu и т.д. )
cat /proc/cpuinfo - отображает подробную информацию о процессоре  
cat /proc/meminfo  - отображает подробную информацию о памяти
free -h - информация о памяти 
cat /proc/partitions -  показывает размер и количество разделов на Вашей карте SD или HDD
sensors - температура железа (apt install lm-sensors)
watch sensors - наблюдаем за температурой железа

Общая информация для Raspberry Pi:

vcgencmd measure_temp - температура процессора
vcgencmd get_mem arm && vcgencmd get_mem gpu - распределение памяти между CPU и GPU 
raspi-config - команда для настройки raspbian

Узнаем жрунов:

top - ищем жруна  и узнаем PID
htop - ищем жруна  и узнаем PID

Узнаем более подробней что жрет:

1) ps -ef | grep PID - узнаем кто запустил процесс
2) lsof -p PID - узнаем какие используем файлы  
3) Смотрим логи 

Сеть клиент:

1) ping host_name - проверяем доступность хоста
2) traceroute -n host_name - покажет маршрут
2) sudo traceroute -nI host_name - покажет маршрут (будет использоваться ICPM как в windows)
3) iptables -L - проверяем firewall
4) telnet host_name number_port - проверяем хост и возможность подключится
5) cat /sys/class/net/name_interface/speed - скорость соединения интерфейса

Сеть сервер:

0) ping host_name - проверяем доступность хоста
1) iptables -L - проверяем firewall
2) netstat -ntulp - проверяем открытые порты 
2) ss -ntulp - проверяем открытые порты
3) Смотрим логи
4) cat /sys/class/net/name_interface/speed - скорость соединения интерфейса

Производительность тесты (Требует X):

apt-get install gtkperf hardinfo - установка 
hardinfo - информация о железе и тест производительности
gtkperf - тест производительности
phoronix-test-suite  - известный тест производительности
stess-ng - тест производительности \ стабильности
stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 60s --metrics-brief
stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 256M --timeout 60s
stress-ng --vm 2 --vm-bytes 1G --timeout 60s
Рубрики
Raspberry Pi

raspberry pi / без монитора / настройка wi-fi

Ссылки:

https://habr.com/post/419947/
http://wiki.virt2real.ru/w/USB_gadget

Настройка Wi-Fi подключения с помощью файла:

0. Создаем файл в корне SD карты
touch /mount_point_SD/boot/wpa_supplicant.conf

1. генерируем пароль 
wpa_passphrase ИМЯ_ТОЧКИ_ДОСТУПА ПАРОЛЬ

2. Пишем в файл /mount_point_SD/boot/wpa_supplicant.conf
------------------------
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=UK
## Первые три строчки необходимы для версий Raspbian >= Stretch
network={
    ssid="ИМЯ_ТОЧКИ_ДОСТУПА"
    psk="ХЕШ_ИЛИ"
}
------------------------

P.S можно конечно сгенерировать и вставить вывод, а потом отредактировать.
wpa_passphrase ИМЯ_ТОЧКИ_ДОСТУПА ПАРОЛЬ >> /mount_point_SD/boot/wpa_supplicant.conf


Команды:

iwlist wlan0 scan - сканирования WiFi-сетей
ifdown wlan0 - отключить интерфейс
ifup wlan0 - включить интерфейс
iwconfig wlan0 - проверить WiFi-соединение

Подключение к wi-fi из консоли raspbian:

iwlist wlan0 scan - сканирования WiFi-сетей
raspi-config - с помощью этой программы можно настроить подключение к wi-fi из консоли raspbian

Ручное подключение к wi-fi из консоли raspbian:


0. Генерация пароля Wi-Fi на raspbian
wpa_passphrase ИМЯ_ТОЧКИ_ДОСТУПА ПАРОЛЬ

1. nano /etc/wpa_supplicant/wpa_supplicant.conf
-----------------------------------------------
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=UK
## Первые три строчки необходимы для версий Raspbian >= Stretch
network={
    ssid="ИМЯ_ТОЧКИ_ДОСТУПА"
    psk="ХЕШ_ПАРОЛЯ"
}
-----------------------------------------------

P.S
wpa_passphrase ИМЯ_ТОЧКИ_ДОСТУПА ПАРОЛЬ  >> /etc/wpa_supplicant/wpa_supplicant.conf 

Как убрать настроенный Wi-fi на rasbian:

0. Очищаем файл wpa_supplicant.conf
Echo "#clean" > /etc/wpa_supplicant/wpa_supplicant.conf