===== УПС! Ты получил более крутую Raspberry! =====
Привет!
Хорошие новости! Ребята из Raspberry обновили свою плату до версии B+.
Наша книга — та, что в коробке, была написана до этого, и поэтому в некоторых местах устарела.
Но это не беда!
Эта страница сделана специального для того, что исправить это недоразумение.
Ниже страницы и главы, в которых есть изменения и обновлённые инструкции.
Как только, проходя книгу, ты доберешься до одной из этих глав — прочитай здесь, что нужно сделать, чтобы, всё заработало!
===== Стр. 4. Raspberry PI =====
Отсюда все ноги и растут. Плата обновилась и выглядит иначе, вот так:
{{:rb_aplg:pi.png?450|}}
===== Стр. 7 =====
Переключить язык спомощью Shift+alt без длинной дополнительной настройки не выйдет.\\
===== Стр. 8. WI-FI =====
Здесь всё в порядке.
Просто хотим обратить внимание на то, что подробная инструкция по подключению по SSH есть в книге на стр. 72.
===== Стр. 25. Маячок =====
Пукнт 3 инструкции предлагает сохранить файл спомощью ''File -> Save As..''
Но скорее всего, ты не наблюдаешь этого меню в Thonny. Потому что при первом запуске редактора Thonny Python IDE главное меню скрыто.В этом случае, делай так:
Нажми на ссылку в верхнем правом углу окна IDE.
{{ :malina:1.png?nolink |}}
Подтверди изменения
{{ :malina:2.png?nolink |}}
После перезапуска IDE изменения вступят в силу.
{{ :malina:3.png?nolink |}}
===== Стр. 40. Landing page =====
Если при перезапуске сервера консоль ответит сообщением\\
''socket.error: [Errno 48] Address already in use'', набери команду
ps -fA | grep python
В консоль выведется список запущенных процессов. Найди строку с файлом landing.py. Во второй колонке будет указан номер процесса. Отключи его командой
kill -9 xxx
Где xxx — номер процесса. Команда kill «убивает» процесс, иногда это называют «убить девяткой».
Запусти сервер заново.
===== Стр. 44. Обратная связь =====
В этой главе используется Python версии 2. После обновления, необходимо использовать Python3.
Вот верный код:
sudo pip3 install flask-socketio eventlet
from flask import Flask, send_file
from flask_socketio import SocketIO
import RPi.GPIO as GPIO
app = Flask('feedback')
socketio = SocketIO(app)
GPIO.setmode(GPIO.BCM)
btn = 2
GPIO.setup(btn, GPIO.IN)
@app.route('/')
def index():
return send_file('feedback.html')
@app.route('/images/')
def get_image(filename):
return send_file('images/'+filename)
@socketio.on('isPressed')
def checkButton(receivedData):
if (GPIO.input(btn) == False):
socketio.emit('button', 'pressed')
else:
socketio.emit('button', 'released')
socketio.run(app, port=3000, host='0.0.0.0', debug=True)
Запусти сервер командой
python3 feedback.py
===== Стр. 48. Погодный фиджет =====
На сайте Openweathermap.org изменился API.\\
Теперь правильный код выглядит так:\\
import requests, json
from pprint import pprint
url = 'http://api.openweathermap.org/data/2.5/forecast'
payload = {
'lat': 'широта_твоего_города',
'lon': 'долгота_твоего_города',
'units': 'metric',
'appid': 'твой_ключ'
}
res = requests.get(url, params=payload)
data = json.loads(res.text)
weather = data['list'][0]
def pars_weather(weatherType, timeRange, measurementUnits):
if (weatherType in weather) and (timeRange in weather[a].keys()):
print weatherType, ': ', weather[weatherType][timeRange], c
else:
print weatherType, ': ', 'none'
pars_weather('clouds', 'all', '%')
pars_weather('rain', '3h', 'mm')
pars_weather('snow', '3h', 'mm')
print 'temp:', weather['main']['temp'], 'C'
Наш вариант погодного фиджета:
amperka.github.io/malina_support/weather.py
===== Стр. 54. Бот Вконтакте =====
Команда Вконтакте тоже изменила API.
Вот актуальный код для этой главы:
# -*- coding: utf-8 -*-
import time
import vk_api
from socket import gethostbyname
vk = vk_api.VkApi(token = 'твой токен')
param = {
'count' : 1,
'time_offset' : 5,
'filter' : 'unread'
}
def write_msg(user_id, msg, random):
vk.method('messages.send', {
'user_id': user_id,
'message': msg,
'random_id':random,
})
while True:
response = vk.method('messages.getConversations', param)
if response['items']:
item = response['items'][0]
last_mess = item['last_message']
random = last_mess['random_id']
my_id = last_mess['peer_id']
text = last_mess['text']
write_msg(my_id, text, random)
time.sleep(1)
===== Стр. 55. Автозапуск и расписания =====
В параграфе «ПРИМЕРЫ» есть лишние символы *. У каждой из приведённых в книге комманд 5 параметров. Звездочки закрывают «пропуски».
Соответственно команды должны выглядеть так:
15 16 * * * python blink.py
0 10 1,16 * * python payment.py
15 7 * * 0-4 python alarm/wakeUp.py
0 */3 * * * python web-server/fidget.py
В каждой строке на одну нужно * меньше, чтобы получилось 5 параметров, а не 6.
===== Стр. 68. Поставь торрент заранее! =====
Этот код тоже использует API ВКонтакте.
Вот верный код:
# -*- coding: utf-8 -*-
import time
import vk_api
from deluge_client import DelugeRPCClient
from pprint import pprint
vk = vk_api.VkApi(token = 'твой токен')
values = {
'count' : 1,
'offset' : 0,
'filter' : 'unread'
}
client = DelugeRPCClient(
'127.0.0.1',
58846,
'pi',
'raspberry'
)
client.connect()
def write_msg(user_id, msg , random):
vk.method('messages.send', {
'user_id': user_id,
'message': msg,
'random_id':random,
})
while True:
response = vk.method('messages.getConversations', values)
if response['items']:
item = response['items'][0]
last_mess = item['last_message']
random = last_mess['random_id']
my_id = last_mess['peer_id']
text = last_mess['text']
client.call('core.add_torrent_url', text, {'move_completed_path' : '/home/pi/Torrents'})
write_msg(my_id, u'Download is begin!', random)
time.sleep(1)