В этом материале вы узнаете, как создать REST API с помощью Raspberry Pi Pico W и управлять двумя светодиодами – красным и зеленым – через Postman. Для этого проекта мы собираемся использовать библиотеку Phew MicroPython. Этот проект не только представляет собой практическое введение во взаимодействие оборудования через API, но также демонстрирует возможности Raspberry Pi Pico W в создании решений Интернета вещей.
from phew import connect_to_wifi
ip = connect_to_wifi(«YOUR_SSID», «YOUR_PASSWORD»)print(«Connected to IP», ip)
Сначала подключите Raspberry Pi Pico W к макетной плате. Вставьте зеленый светодиод в один слот, а красный светодиод в другой. Подключите более длинную ножку (анод) каждого светодиода к отдельным контактам GPIO на Pico W (мы используем GPIO0 для зеленого цвета и GPIO1 для красного). При необходимости используйте резисторы 220 Ом для защиты светодиодов. Подключите более короткую ножку (катод) каждого светодиода к земле.
Прежде чем развертывать наш код, убедитесь, что ваш Raspberry Pi Pico W подключен к Интернету через Wi-Fi. Используйте следующий сегмент в своем скрипте для подключения:
from phew import connect_to_wifi
ip = connect_to_wifi("YOUR_SSID", "YOUR_PASSWORD")
print("Connected to IP", ip)
Замените «YOUR_SSID» и «YOUR_ПАРОЛЬ» на свои фактические учетные данные Wi-Fi. Используйте фреймворк Phew для написания и запуска веб-сервера на Pico W:
from phew import server
import machine, json
led_green = machine.Pin(0, machine.Pin.OUT)
led_red = machine.Pin(1, machine.Pin.OUT)
Конечная точка датчика температуры (Temperature Sensor Endpoint): эта конечная точка возвращает текущую температуру, используя возможности АЦП Pico W:
@server.route("/api/temperature", methods=["GET"])
def get_temperature(request):
adc = machine.ADC(4)
conversion_factor = 3.3 / 65535
sensor_value = adc.read_u16() * conversion_factor
temperature = 27 - (sensor_value - 0.706) / 0.001721
return json.dumps({"temperature": temperature}), 200, {"Content-Type": "application/json"}
Конечная точка управления светодиодами (LED Control Endpoint): создайте конечную точку POST для управления светодиодами:
@server.route("/api/control-led", methods=["POST"])
def ledCommand(request):
led_red.value(request.data["ledRed"])
led_green.value(request.data["ledGreen"])
return json.dumps({"message": "Command sent successfully!"}), 200, {"Content-Type": "application/json"}
Убедитесь, что ваш сервер настроен для работы с помощью следующей строки:
server.run()
Откройте Postman и создайте новый запрос на управление светодиодами. Установите тип POST и введите IP-адрес вашего Raspberry Pi Pico W, а затем /api/control-led. В теле запроса укажите состояние каждого светодиода в формате JSON, например, {«ledRed»: 1, «ledGreen»: 0}.
Весь код целиком:
from phew import server, connect_to_wifi
import machine
import json
ip = connect_to_wifi("YOUR_SSID", "YOUR_PASSWORD")
led_green = machine.Pin(0, machine.Pin.OUT)
led_red = machine.Pin(1, machine.Pin.OUT)
print("connected to IP ", ip)
@server.route("/api/temperature", methods=["GET"])
def get_temperature(request):
adc = machine.ADC(4) # Use ADC pin GP4
conversion_factor = 3.3 / (65535) # ADC conversion factor
sensor_value = adc.read_u16() * conversion_factor
temperature = 27 - (sensor_value - 0.706) / 0.001721 # Convert sensor value to temperature (formula may vary)
return json.dumps({"temperature" : temperature}), 200, {"Content-Type": "application/json"}
@server.route("/api/control-led", methods=["POST"])
def ledCommand(request):
led_red.value(request.data["ledRed"])
led_green.value(request.data["ledGreen"])
return json.dumps({"message" : "Command sent successfully!"}), 200, {"Content-Type": "application/json"}
@server.catchall()
def catchall(request):
return json.dumps({"message" : "URL not found!"}), 404, {"Content-Type": "application/json"}
server.run()
Raspberry Pi Pico
Микроконтроллерная плата Raspberry Pi Pico на основе микроконтроллера RP2040