Устройство Cytron Maker Pi Pico Mini поставляется с микроконтроллерной платой Raspberry Pi Pico или Raspberry Pi Pico W. Он имеет те же функции, что и более крупный Maker Pi Pico, включая светодиод GPIO, светодиод WS2812B Neopixel RGB, пассивный пьезозуммер, программируемые кнопки и кнопку сброса.
Нам хотелось бы поблагодарить Cytron за отправку платы Maker Pi Pico Mini, оснащенной Raspberry Pi Pico W, а также символьным ЖК-дисплеем RGB и литий-полимерной батареей 3,7 В. В этом уроке мы покажем, как сделать метеостанцию с платой Maker Pi Pico Mini, используя код Arduino и API OpenWeather.
Мы уже рассмотрели плату Maker Pi Pico Mini, поэтому подробнее рассмотрим аксессуары.
SparkFun SerЖК-символьный дисплей
SparkFun SerLCD — это дисплей 16×2 символов с микроконтроллером Microchip ATmega328P, который обрабатывает команды, отправляемые с хоста через соединение I2C, SPI или Qwicc (I2C). Дисплей RGB также поддерживает изменение цвета символов.
Мы подключим разъем Qwiic к порту Maker Pico W Mini Maker Pico W Mini, так как это наиболее удобно с прилагаемым кабелем, передающим как питание, так и сигналы I2C.
Батарея
Аккумулятор представляет собой литий-полимерный аккумулятор емкостью 1300 мАч и рабочим напряжением 3,7 В. Его можно подключить к разъему JST на плате Maker Pi Pico Mini, которая также поддерживает зарядку через порт USB.
Добавление платы Raspberry Pi Pico W в Arduino IDE
Предположим, вы уже установили Arduino IDE. Чтобы добавить плату в Arduino IDE, перейдите в « Файл» >>> «Настройки» в Windows/Linux или « Arduino» >>> «Настройки » в macOS, как показано на снимке экрана ниже.
Введите URL-адрес Raspberry Pi Pico в поле «Дополнительные URL-адреса диспетчера плат»:
1 2 |
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json |
Теперь давайте перейдем в Инструменты >>> Плата >>> Управление платами , найдите «rp2040:» и установите поддержку «Raspberry Pi Pico/RP2040».
Теперь мы можем перейти в Инструменты >>> Плата >>> платы Raspberry Pi RP2040 и выбрать плату Raspberry Pi Pico W.
Установка библиотеки SparkFun SerLCD
Теперь мы установим библиотеку для ЖК-дисплея. Перейдем в Скетч >>> Включить библиотеку >>> Управление библиотеками, как показано на скриншоте ниже.
Теперь мы можем выполнить поиск «serlcd» в окне диспетчера библиотек и установить соответствующую библиотеку, а именно Sparkfun SerLCD Arduino Library.
Затем мы можем добавить библиотеку в наш проект, выбрав Скетч >>> Включить библиотеку >>> SparkFun SerLCD Arduino Library .
Библиотека появится в нашем коде:
1 |
#include <SerLCD.h> |
Отображение символов на SerLCD, изменение цвета подсветки
Приведенный ниже код изменяет символы и цвет подсветки, а также светодиод RGB (с использованием библиотеки NeoPixel). В частности, код проходит через 10 цветов, каждый из которых обновляется каждые 3 секунды.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
#include <Wire.h> #include <SerLCD.h> //Click here to get the library: http://librarymanager/All#SparkFun_SerLCD #include <Adafruit_NeoPixel.h> #define LED_PIN 28 #define LED_COUNT 1 Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); SerLCD lcd; // Initialize the library with default I2C address 0x72 void setup() { Wire.begin(); strip.begin(); strip.show(); strip.setBrightness(50); //change the RGB brightness between 0-255 lcd.begin(Wire); //By default .begin() will set I2C SCL to Standard Speed mode of 100kHz Wire.setClock(400000); //Optional - set I2C SCL to High Speed Mode of 400kHz } void loop() { lcd.setBacklight(0, 0, 0); //black is off lcd.clear(); //Clear the display - this moves the cursor to home position as well lcd.print("Black (off)"); strip.setPixelColor(0, strip.Color(0, 0, 0)); strip.show(); delay(3000); lcd.setBacklight(255, 0, 0); //red lcd.clear(); lcd.print("Red"); strip.setPixelColor(0, strip.Color(255, 0, 0)); strip.show(); delay(3000); lcd.setBacklight(0xFF8C00); //orange lcd.clear(); lcd.print("Orange"); strip.setPixelColor(0, strip.Color(255,127,0)); strip.show(); delay(3000); lcd.setBacklight(255, 255, 0); //yellow lcd.clear(); lcd.print("Yellow"); strip.setPixelColor(0, strip.Color(0, 255, 0)); strip.show(); delay(3000); lcd.setBacklight(0, 255, 0); //green lcd.clear(); lcd.print("Green"); strip.setPixelColor(0, strip.Color(0, 255, 0)); strip.show(); delay(3000); lcd.setBacklight(0, 0, 255); //blue lcd.clear(); lcd.print("Blue"); strip.setPixelColor(0, strip.Color(0, 0, 255)); strip.show(); delay(3000); lcd.setBacklight(0x4B0082); //indigo, a kind of dark purplish blue lcd.clear(); lcd.print("Indigo"); strip.setPixelColor(0, strip.Color(75,0,130)); strip.show(); delay(3000); lcd.setBacklight(0xA020F0); //violet lcd.clear(); lcd.print("Violet"); strip.setPixelColor(0, strip.Color(127,0,255)); strip.show(); delay(3000); lcd.setBacklight(0x808080); //grey lcd.clear(); lcd.print("Grey"); strip.setPixelColor(0, strip.Color(197, 197, 204)); strip.show(); delay(3000); lcd.setBacklight(255, 255, 255); //white lcd.clear(); lcd.print("White"); strip.setPixelColor(0, strip.Color(255, 255, 255)); strip.show(); delay(3000); } |
Все работает нормально, и вы можете посмотреть видео ниже, чтобы увидеть плату и код в действии.
Подключение Maker Pi Pico Mini к Интернету/WiFi
Код сначала пытается подключиться к WiFi и отображает сообщение о состоянии «Не подключено» красным цветом, пока подключение не будет успешным, после чего подсветка ЖК-дисплея переключается на зеленый цвет с сообщением «WiFi подключен» и IP-адресом. При попытке подключения светодиод RGB переливается радужным узором и становится зеленым при успешном подключении.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#include <WiFi.h> #include <SerLCD.h> #include <Wire.h> #include <Adafruit_NeoPixel.h> #define LED_PIN 28 #define LED_COUNT 1 Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); SerLCD lcd; const char* ssid = "xxxxxxxxxx"; // WiFi SSD const char* password = "xxxxx"; // Wifi password void setup() { Serial.begin(115200); strip.begin(); strip.setBrightness(50); //set RGB brightness 0-255 WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Wire.begin(); Wire.setClock(400000); Serial.println("Connecting to WIFI..."); lcd.begin(Wire); //Set up the LCD for I2C communication lcd.clear(); lcd.setContrast(5); //Set contrast. Lower to 0 for higher contrast. lcd.clear(); //Clear the display - this moves the cursor to home position as well lcd.setBacklight(255, 0, 0); lcd.clear(); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); lcd.setCursor(1, 0); lcd.print(":WiFi Status:"); lcd.setCursor(2, 1); lcd.print("Not Connected"); rainbow(10); } strip.setPixelColor(0, strip.Color(0, 255, 0)); strip.show(); Serial.println(""); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); lcd.setBacklight(0, 255, 0); lcd.clear(); lcd.setCursor(2, 0); lcd.print("WiFi Connect"); lcd.setCursor(1, 1); lcd.print("IP:"); lcd.setCursor(4, 1); lcd.print(WiFi.localIP()); } void loop() { } void rainbow(int wait) { for (long firstPixelHue = 0; firstPixelHue &lt; 5 * 65536; firstPixelHue += 256) { strip.rainbow(firstPixelHue); strip.show(); // Update strip with new contents delay(wait); // Pause for a moment } } |
Посмотрите видео ниже, чтобы увидеть результат.
Метеостанция Maker Pi Pico Mini с использованием OpenWeather API
В этом эксперименте мы будем использовать HTTP GET для получения данных о погоде через API openweathermap.org. API предоставляется бесплатно, но есть ограничение на количество запросов, о котором подробнее можно прочитать на сайте. Но бесплатного пакета достаточно для обучения и экспериментов.
OpenWeatherMap — это веб-сайт, предоставляющий информацию о погоде, глобальные прогнозы погоды, исторические данные о погоде, карты погоды и т. д. Он очень прост в использовании: просто введите название города и страны, и вы получите информацию о погоде. Первый шаг — зарегистрироваться в службе, нажав «Войти» и создав учетную запись с именем пользователя, адресом электронной почты и паролем.
Как только это будет сделано, войдите в сервис и нажмите «Мои ключи API » .
Просто скопируйте ключ API…
… так как вы будете использовать его в скетче Arduino.
Мы также установили город и страну как Бангкок и TH (код страны для Таиланда) выше, но их можно изменить на любой крупный город по всему миру, например, Лондон в Соединенном Королевстве с My_city = «Лондон», my_country_code = «ГБ».
Вот код Arduino, который мы использовали с платой Maker Pi Pico Mini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
#include <WiFi.h>; #include <HTTPClient.h>; #include <Arduino_JSON.h>; #include <SerLCD.h>; #include <Wire.h>; #include <Adafruit_NeoPixel.h>; #define LED_PIN 28 #define LED_COUNT 1 Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); SerLCD lcd; const char* ssid = "xxxxxxx"; const char* password = "xxxx"; String my_Api_Key = "xxxxxxxxxxxxxx"; String my_city = "Bangkok"; //specify your city String my_country_code = "TH"; //specify your country code unsigned long last_time = 0; unsigned long timer_delay = 10000; String json_array; void setup() { Serial.begin(115200); strip.begin(); strip.show(); strip.setBrightness(50); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Wire.begin(); Wire.setClock(400000); Serial.println("Connecting to WIFI..."); lcd.begin(Wire); //Set up the LCD for I2C communication lcd.clear(); lcd.setContrast(5); //Set contrast. Lower to 0 for higher contrast. lcd.clear(); //Clear the display - this moves the cursor to home position as well lcd.setBacklight(255, 0, 0); lcd.clear(); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); lcd.setCursor(1, 0); lcd.print(":WiFi Status:"); lcd.setCursor(2, 1); lcd.print("Not Connect"); rainbow(10); } strip.setPixelColor(0, strip.Color(0, 255, 0)); strip.show(); Serial.println(""); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); lcd.setBacklight(0, 255, 0); lcd.clear(); lcd.setCursor(2, 0); lcd.print("WiFi Connect"); lcd.setCursor(1, 1); lcd.print("IP:"); lcd.setCursor(4, 1); lcd.print(WiFi.localIP()); Serial.println("First set of readings will appear after 10 seconds"); delay(3000); } void loop() { if ((millis() - last_time) &gt; timer_delay) { if (WiFi.status() == WL_CONNECTED) { String server = "http://api.openweathermap.org/data/2.5/weather?q=" + my_city + "," + my_country_code + "&amp;APPID=" + my_Api_Key + "&amp;units=metric"; lcd.clear(); lcd.setBacklight(255, 255, 255); json_array = GET_Request(server.c_str()); Serial.println(json_array); JSONVar my_obj = JSON.parse(json_array); if (JSON.typeof(my_obj) == "undefined") { Serial.println("Parsing input failed!"); return; } Serial.print("JSON object = "); Serial.println(my_obj); Serial.print("Temperature: "); Serial.println(my_obj["main"]["temp"]); Serial.print("Pressure: "); Serial.println(my_obj["main"]["pressure"]); Serial.print("Humidity: "); Serial.println(my_obj["main"]["humidity"]); Serial.print("Wind Speed: "); Serial.println(my_obj["wind"]["speed"]); lcd.setCursor(0, 0); lcd.print("WEATHER: BANGKOK"); lcd.setCursor(1, 1); lcd.print("T="); lcd.print(my_obj["main"]["temp"]); lcd.setCursor(7, 1); lcd.print((char)223); lcd.print("C"); lcd.setCursor(10, 1); lcd.print("H="); lcd.print(my_obj["main"]["humidity"]); lcd.print("%"); } else { Serial.println("WiFi Disconnected"); } last_time = millis(); } } String GET_Request(const char* server) { HTTPClient http; http.begin(server); int httpResponseCode = http.GET(); String payload = "{}"; if (httpResponseCode &gt; 0) { Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); payload = http.getString(); } else { Serial.print("Error code: "); Serial.println(httpResponseCode); } http.end(); return payload; } void rainbow(int wait) { for (long firstPixelHue = 0; firstPixelHue &lt; 5 * 65536; firstPixelHue += 256) { strip.rainbow(firstPixelHue); strip.show(); // Update strip with new contents delay(wait); // Pause for a moment } } |
Посмотрите видео, встроенное ниже, отображающее погоду и температуру в Бангкоке на основе данных, предоставленных OpenWeatherMap.
Вот и все, мы только что сделали метеостанцию с батарейным питанием на основе платы Maker Pi Pico Mini и SparkFun SerLCD. Вы можете носить его с собой в любом месте, и вам просто нужно подключение Wi-Fi с подключением к Интернету.
Cytron продает Maker Pi Pico Mini в своем интернет-магазине по цене от 8,90 до 14,40 долларов в зависимости от опций. Полный комплект, используемый в этом руководстве, должен стоить около 50 долларов США с платой, дисплеем и батареей.
Это руководство изначально было опубликовано на сайте CNX Software Thailand на тайском языке.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.