Цифровая электроника для начинающих (Елисеев) - страница 63


4.9. Выходим в Web: запускаем свой сервер

Теперь рассмотрим обратную задачу - запустим свой сервер, который пользователь сможет открыть в браузере. Разумеется, Raspberry Pi имеет полноценную ОС Linux, и здесь можно запустить хоть Apache, хоть FTP. Но это не так интересно - мы запустим собственный сервер, который напишем на языке Python.


Для начала - самое простое, чего в 95% случаев будет вполне достаточно. Если мы хотим просто дать пользователю доступ к текущей папке, то в консоли достаточно ввести команду:

python -m SimpleHTTPServer 8000


Пользователь сможет зайти из браузера и увидеть (и скачать) любой файл:


Если нужно что-то посложнее, например управлять каким-либо устройством, придется написать свой код.


Рассмотрим минимальный пример работающего web-сервера на Python. Для примера, будем управлять светодиодом, как и в случае c ESP32. Но в отличие от ESP32, Raspberry Pi полноценно может работать с файлами, так что хранить HTML прямо в коде не требуется, просто сохраним файл как index.html.


Raspberry Pi server

Turn LED ON

Turn LED OFF


Сам код сервера будет весьма прост. Естественно, это минимальный пример, реальный веб-сервер может поддерживать практически все современные технологии - POST и GET-запросы, Javascript и пр. Полет фантазии тут неограничен. Нам же будет достаточно следующего кода:

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer


class Server(BaseHTTPRequestHandler):


def do_GET(self):

self.send_response(200)

self.send_header('Content-type', 'text/html')

self.end_headers()

with open('index.html', 'r') as myfile:

data = myfile.read()

self.wfile.write(data)

if "/H" in self.path:

print "LED ON"

if "/L" in self.path:

print "LED OFF"


if __name__ == "__main__":

server_address = ('', 8000)

httpd = HTTPServer(server_address, Server)

print 'Starting httpd...'

try:

httpd.serve_forever()

except:

pass

print 'Done'


Самостоятельная работа: дописать код включения и выключения светодиода вместо функции print "LED ON" и print "LED OFF". Перед вызовом сервера serve_forever также нужно будет дописать код инициализации GPIO.



4.10. Дистанционное управление со смартфона

С помощью портов ввода-вывода мы уже можем управлять внешними устройствами, например платой управления двигателем. Мы также можем запустить собственный сервер, как было показано выше. Добавим в наш сервер возможность реакции на нажатие и отпускание кнопок, это позволит использовать смартфон как полноценный пульт дистанционного управления. Такой интерфейс сейчас весьма популярен и используется, например, для управления мини-дронами.