Привет!
Хорошие новости! Ребята из Raspberry обновили свою плату до версии B+. Наша книга — та, что в коробке, была написана до этого, и поэтому в некоторых местах устарела.
Но это не беда!
Эта страница сделана специального для того, что исправить это недоразумение. Ниже страницы и главы, в которых есть изменения и обновлённые инструкции. Как только, проходя книгу, ты доберешься до одной из этих глав — прочитай здесь, что нужно сделать, чтобы, всё заработало!
Переключить язык спомощью Shift+alt без длинной дополнительной настройки не выйдет.
Здесь всё в порядке. Просто хотим обратить внимание на то, что подробная инструкция по подключению по SSH есть в книге на стр. 72.
Пукнт 3 инструкции предлагает сохранить файл спомощью File → Save As..
Но скорее всего, ты не наблюдаешь этого меню в Thonny. Потому что при первом запуске редактора Thonny Python IDE главное меню скрыто.В этом случае, делай так:
Нажми на ссылку в верхнем правом углу окна IDE. Подтверди изменения После перезапуска IDE изменения вступят в силу.
Если при перезапуске сервера консоль ответит сообщением
socket.error: [Errno 48] Address already in use
, набери команду
ps -fA | grep python
В консоль выведется список запущенных процессов. Найди строку с файлом landing.py. Во второй колонке будет указан номер процесса. Отключи его командой
kill -9 xxx
Где xxx — номер процесса. Команда kill «убивает» процесс, иногда это называют «убить девяткой».
Запусти сервер заново.
В этой главе используется 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/<filename>') 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
На сайте 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
Команда Вконтакте тоже изменила 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)
В параграфе «ПРИМЕРЫ» есть лишние символы *. У каждой из приведённых в книге комманд 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.
Этот код тоже использует 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)