Micropython pico giấc ngủ sâu

Máy tính bảng đơn [SBC] là thiết bị nhỏ, năng lượng thấp, tuyệt vời, thường có kết nối không dây, khiến chúng trở nên lý tưởng cho các dự án chạy bằng pin đơn giản

Tuy nhiên, khi tính toán ngân sách năng lượng của mình, bạn thường nhận ra rằng chúng không đủ năng lượng thấp để chứa các cục pin nhỏ chạy trong thời gian dài [nhiều ngày/tháng]. Chúng ta thường không cần có mặt toàn thời gian, vậy tại sao không đặt máy tính ở chế độ ngủ để cải thiện tuổi thọ pin cho dự án của chúng ta?

Trong bài viết này, tôi sẽ chỉ cho bạn cách tôi tạo balenaBlock ‘Morpheus’ để cung cấp cho bạn một cách tiếp cận đơn giản để kích hoạt khả năng ngủ sâu trên dự án Raspberry Pi chạy bằng pin tiếp theo của bạn [hoặc bất kỳ dự án chạy bằng SBC nào]

trường hợp nghiên cứu

Để chứng minh nó hoạt động như thế nào, tôi đã sử dụng dự án BalenaLabs Inkyshot, dự án này hoàn toàn phù hợp với trường hợp sử dụng hoạt động bằng pin, hoạt động không liên tục

Dưới đây là tổng quan nhanh về những gì Inkyshot thực hiện, dự án khi khởi động sẽ kết nối với internet, lấy một câu trích dẫn truyền cảm hứng mới hoặc thời tiết địa phương của bạn, sau đó sẽ cập nhật màn hình eInk, quá trình này thỉnh thoảng được lặp lại [thường là mỗi lần một lần]

Dự án này là hoàn hảo cho hoạt động của pin vì màn hình eInk giữ lại màn hình mà không cần nguồn, điều này cho phép chúng tôi tắt hoàn toàn hệ thống để tiết kiệm pin

Hóa đơn nguyên vật liệu

Để tái tạo dự án này, phần cứng bạn sẽ cần

  • Một SBC tương thích với Raspberry Pi,
  • Một thẻ SD,
  • Một bảng vi điều khiển Raspberry Pi Pico,
  • Bộ điều chỉnh điện áp có chốt kích hoạt [chúng tôi đã sử dụng Weewooday-5825 được tìm thấy trên Amazon, nhưng bạn cũng có thể chuyển đổi bộ LM2596S],
  • Một Inky pHat hoặc Waveshare 2. Mô-đun hiển thị eInk 13",
  • 2 cáp USB-A đến Micro-USB [hoặc một + một A đến C nếu sử dụng Pi4],
  • Một nguồn điện trong phạm vi 6-12V, với khả năng ít nhất là 1A [tùy thuộc vào Raspberry bạn chọn],
  • Một cách để kết nối với nguồn điện của bạn [kẹp cá sấu, giắc cắm thùng. ],
  • Một bảng hoàn hảo để gắn kết mọi thứ lại với nhau [tùy chọn]
  • Một mỏ hàn,
  • Một số hàn,
  • Một số dây để kết nối mọi thứ

Phần mềm bạn sẽ cần

Mục tiêu của chúng tôi

Để giữ mức tiêu thụ điện năng càng thấp càng tốt, cách tiếp cận tốt nhất là

  1. Bắt đầu hệ thống của chúng tôi,
  2. Kết nối với internet [tùy chọn, tùy thuộc vào yêu cầu của dự án],
  3. Tải trạng thái dự án của chúng tôi từ bộ lưu trữ [tùy chọn, tùy thuộc vào yêu cầu của dự án],
  4. Thực hiện xử lý dự án, cập nhật, thông tin liên lạc của chúng tôi. ,
  5. Lập trình các điều kiện thức dậy tiếp theo của chúng tôi,
  6. Đi vào giấc ngủ sâu để bảo tồn càng nhiều năng lượng càng tốt,
  7. Lặp lại từ [2] khi thức dậy

Nếu chúng tôi áp dụng nó cho trường hợp sử dụng của mình, chúng tôi muốn

  1. Khởi động hệ thống của chúng tôi khi bật nguồn,
  2. Kết nối với Internet,
  3. Kéo dữ liệu của chúng tôi và cập nhật màn hình,
  4. Lập trình thời gian ngủ 1h,
  5. Đi vào giấc ngủ sâu,
  6. Lặp lại từ [1]

Vấn đề

Việc thực hiện chu trình hoạt động này không được hỗ trợ trên RaspberryPi, chúng không thể chuyển sang chế độ năng lượng thấp. Cách duy nhất để giảm đáng kể mức tiêu thụ điện năng là tắt SBC và cắt nguồn cung cấp điện. Khi hệ thống đã tắt, bạn cần can thiệp thủ công/bên ngoài để bật lại hệ thống

giải pháp đề xuất. hình thái

Để giảm mức tiêu thụ năng lượng, một cách tiếp cận phổ biến trong các hệ thống nhúng là cắt nguồn cung cấp năng lượng trên các thành phần tiêu thụ năng lượng chính. Để làm như vậy, chúng tôi sẽ sử dụng mạch ngoài công suất cực thấp có thể theo dõi thời gian, giao tiếp với Raspberry Pi và kiểm soát nguồn điện đầu vào của nó

Morpheus [được đặt tên theo vị thần ngủ và những giấc mơ của Hy Lạp], là một dự án dựa trên Raspberry Pi Pico được thiết kế để giao tiếp giữa bộ nguồn Raspberry Pi và Raspberry Pi của bạn. Tôi đã phát triển Morpheus dưới dạng balenaBlock để giúp bạn tích hợp nó vào các dự án của riêng mình

Ngành kiến ​​​​trúc

Raspberry Pi Pico [được gọi là Pico sau đây] là một bo mạch phát triển Đơn vị điều khiển vi mô [MCU] trị giá 4 đô la, được cung cấp bởi bộ xử lý Dual Cortex-M0+ 133MHz công suất cực thấp, với bộ lưu trữ Flash 2 MB cho chương trình và 264kB RAM bên trong và . Con số này không nhiều so với Gigabyte RAM và dung lượng lưu trữ của Raspberry Pi 3 [được gọi là Pi sau đây] và bộ xử lý đa GHz của nó, nhưng con số này đủ để BẬT và TẮT nguồn điện, hãy theo dõi . và tất cả điều này chỉ chiếm một phần nhỏ trong ngân sách năng lượng của Pi [450mW khi đầy tải, giảm xuống còn 6. 5mW ở chế độ ngủ, so với mức 10+W của Raspberry Pi 4 không có khả năng ngủ]

Hệ thống dây điện cuối cùng sẽ theo sơ đồ này

Vì Pico có khả năng giao tiếp USB nên nó sẽ được kết nối với Pi qua cáp USB để giao tiếp [Dây màu hồng]. Tuy nhiên, vì nguồn điện Pi sẽ bị cắt, nó cũng cần một nguồn điện bên ngoài đầu vào của riêng nó

Nhờ thiết kế thông minh của bo mạch nhỏ này, chân VSYS lộ ra trên các đầu của nó và là đầu vào nguồn 5V, đi-ốt được bảo vệ khỏi đầu vào VBUS [đầu vào nguồn bus USB]. Điều này có nghĩa là nếu bạn cấp nguồn cho bo mạch bằng nguồn điện 5V trên VSYS, nó sẽ tiếp tục chạy ngay cả khi Pi TẮT và nó sẽ không gửi nguồn tới nó qua cổng USB. Điều này được thực hiện bằng cách sử dụng dây Đỏ và bộ ổn áp 5V [ở đây là 7805, nhưng nên ưu tiên hiệu suất cao hơn]

Tiếp theo, chúng ta muốn kết nối một trong các chân GPIO [Đầu vào/Đầu ra mục đích chung] của Pico với đầu vào điều khiển của bộ nguồn Pi [bằng dây Xanh lục]. Lưu ý trong sơ đồ, chúng tôi đang sử dụng bóng bán dẫn BC547 NPN nối tiếp để đảo ngược tín hiệu, vì đầu vào điều khiển LM2596S đang hoạt động ở mức thấp

Chúng tôi đã chọn GPIO 2 cho mục đích này, vì GPIO 0 và 1 được dành riêng cho bus giao tiếp nối tiếp mặc định

Chúng tôi có thể muốn đánh thức Pi bằng cách nhấn nút [hoặc bất kỳ cơ chế chuyển đổi BẬT/TẮT nào, như cảm biến cửa hoặc tấm áp suất]. Nếu đúng như vậy, bạn có thể kết nối công tắc giữa GPIO 3 [dây Cyan từ Pico] và GND [dây Blue]

Đầu ra của bộ nguồn Pi được điều khiển [dây màu cam] được kết nối với đầu nối USB loại A để thuận tiện, nhưng bạn cũng có thể kết nối trực tiếp với chân 5V trên đầu Pi, với dây Micro-USB đã cắt nếu muốn

Lưu ý rằng Dây màu vàng là đầu vào nguồn 12V cho toàn bộ dự án và phải được kết nối với nguồn 12V, 1. Nguồn điện có khả năng 5A

Cuộc họp

  1. Bắt đầu bằng cách tải xuống Tệp UF2 tiền biên dịch
  2. Sau đó, kết nối Pico với máy tính của bạn bằng cáp USB, đồng thời nhấn nút BOOTSEL. Một ổ đĩa USB mới có tên RPI-RP2 sẽ xuất hiện
  3. Kéo tệp UF2 vào ổ đĩa, tệp sẽ tự động biến mất sau 3 đến 10 giây
  4. Khi đĩa đã biến mất, hãy ngắt kết nối Pico khỏi máy tính của bạn, nó đã sẵn sàng hoạt động

2. Chuẩn bị phần cứng
Bước thứ hai để xây dựng dự án là tạo cụm phần cứng theo sơ đồ Kiến trúc.
LƯU Ý QUAN TRỌNG. Bạn nên đặt điện áp đầu ra chính xác [5V] bằng đồng hồ vạn năng TRƯỚC KHI kết nối nguồn với Raspberry Pi.

3. Thêm khối vào dự án của bạn
Sau đó, bạn có thể thêm khối morpheus-serial vào dự án của mình. Thêm đoạn mã sau vào docker-compose của bạn. tập tin yml.

morpheus-serial:
image: bh.cr/g_aurelien_valade/morpheus-serial
cap_add:
- NET_ADMIN
- SYS_ADMIN
- SYS_RAWIO
labels:
io.balena.features.supervisor-api: '1'
io.balena.features.balena-api: '1'
io.balena.features.sysfs: '1'
image: bh.cr/g_aurelien_valade/morpheus-serial0
image: bh.cr/g_aurelien_valade/morpheus-serial1
image: bh.cr/g_aurelien_valade/morpheus-serial2
image: bh.cr/g_aurelien_valade/morpheus-serial3
image: bh.cr/g_aurelien_valade/morpheus-serial4
image: bh.cr/g_aurelien_valade/morpheus-serial5
image: bh.cr/g_aurelien_valade/morpheus-serial6
image: bh.cr/g_aurelien_valade/morpheus-serial7

Bạn có thể điều chỉnh giá trị biến SERIAL_PORT và thiết bị dùng chung nếu cần, nhưng những giá trị đó sẽ hoạt động tốt với cấu hình của chúng tôi [không phải biến SERIAL_PORT trỏ đến thiết bị dùng chung]

4. Sử dụng API
Khối morpheus hiển thị API REST trên cổng TCP 5555 của nó. Tài liệu API hiển thị các lệnh có sẵn. Điều này có thể hiển nhiên nhưng có điều gì đó ở đây về lý do bạn cần sử dụng API?

5. Sử dụng tập lệnh CLI
Để trợ giúp truy cập API Morpheus, bạn có thể thêm morpheus. tập lệnh trợ giúp sh cho dự án của bạn.
Đảm bảo tệp sẽ được sao chép vào vùng chứa ứng dụng của bạn và sẽ có thể thực thi được. Trong dự án inkyshot, chúng tôi thực hiện bằng cách thêm các dòng này sau khối COPY của tệp inkyshot/Dockerfile.

Sau đó, thêm biến môi trường MORPHEUS_ADDR vào bộ chứa ứng dụng của bạn, trỏ đến khối nối tiếp [trong docker-compose. yml].
môi trường.
______18

Cuối cùng, hãy gọi morpheus. sh khi ứng dụng của bạn đã sẵn sàng ở chế độ ngủ, hãy yêu cầu người giám sát tạm dừng thiết bị và bắt đầu vòng lặp chờ.
Đối với inkyshot, chúng tôi đã thay thế phần cron của inkyshot/start. tập lệnh sh theo mã sau.

Yêu cầu ngủ trong 1 giờ
image: bh.cr/g_aurelien_valade/morpheus-serial9

Tắt sạch
cap_add:0
cap_add:1

Ngăn không bỏ cuộc
cap_add:2
cap_add:3
cap_add:4
cap_add:5

Chủ Đề