Mục lục:

Tuy nhiên, một trạm thời tiết thông minh khác, nhưng : 6 bước (có hình ảnh)
Tuy nhiên, một trạm thời tiết thông minh khác, nhưng : 6 bước (có hình ảnh)

Video: Tuy nhiên, một trạm thời tiết thông minh khác, nhưng : 6 bước (có hình ảnh)

Video: Tuy nhiên, một trạm thời tiết thông minh khác, nhưng : 6 bước (có hình ảnh)
Video: Điểm nóng thế giới 29/1: Nga đột ngột kéo tên lửa áp sát nước EU đã từ chối đàm phán với ông Putin 2024, Tháng sáu
Anonim
Image
Image
Tuy nhiên, một trạm thời tiết thông minh khác, nhưng…
Tuy nhiên, một trạm thời tiết thông minh khác, nhưng…
Tuy nhiên, một trạm thời tiết thông minh khác, nhưng…
Tuy nhiên, một trạm thời tiết thông minh khác, nhưng…
Tuy nhiên, một trạm thời tiết thông minh khác, nhưng…
Tuy nhiên, một trạm thời tiết thông minh khác, nhưng…

Được rồi, tôi biết có rất nhiều trạm thời tiết như vậy có sẵn ở khắp mọi nơi, nhưng hãy dành vài phút để xem sự khác biệt…

  • Năng lượng thấp
  • 2 màn hình e-paper…
  • nhưng 10 màn hình khác nhau!
  • Dựa trên ESP32
  • cảm biến gia tốc và nhiệt độ / độ ẩm
  • Cập nhật Wi-Fi
  • Trường hợp in 3D

và rất nhiều thủ thuật hữu ích khác…

Ý tưởng chính là hiển thị nhiều thông tin khác nhau trên cả hai màn hình tùy thuộc vào hướng của hộp. Vỏ có dạng hình hộp song song, lát đá, có loại đai làm chân.

Quân nhu

Như bạn thấy, hệ thống bao gồm 2 màn hình e-paper và một hộp in 3D. Nhưng có rất nhiều thứ trong đó:

  • Một ESP32
  • Một máy đo gia tốc MPU6050
  • Một cảm biến DHT22
  • Pin LiPo
  • Một PCB để kết nối toàn bộ mọi thứ
  • Chủ đề duPont tự chế

và kết nối Wi-Fi. Trên thực tế, 3 mạng được khai báo, hệ thống sẽ kiểm tra từng mạng một cho đến khi kết nối thành công.

Bước 1: Tại sao lại có một trạm thời tiết khác?

Tại sao lại có một trạm thời tiết khác?
Tại sao lại có một trạm thời tiết khác?
Tại sao lại có một trạm thời tiết khác?
Tại sao lại có một trạm thời tiết khác?
Tại sao lại có một trạm thời tiết khác?
Tại sao lại có một trạm thời tiết khác?
Tại sao lại có một trạm thời tiết khác?
Tại sao lại có một trạm thời tiết khác?

Ý tưởng là hiển thị nhiều loại thông tin khác nhau trên cả hai màn hình tùy thuộc vào hướng của hộp. Vỏ có dạng hình hộp song song, lát đá, có một loại đai làm giá đỡ để đứng vững.

Gia tốc kế phát hiện chuyển động và định hướng và kích hoạt hiển thị.

Để tiết kiệm năng lượng, tôi đã chọn các màn hình e-paper (xem tài liệu tham khảo bên dưới) giữ cho màn hình hiển thị ngay cả khi chúng không còn được cấp nguồn. Tương tự như vậy đối với ESP32, tôi chọn mô-đun Lolin32 (nổi tiếng về sự tiết kiệm của nó) và tôi phải học cách quản lý giấc ngủ sâu và thức dậy khi bị gián đoạn do gia tốc kế tạo ra.

Các màn hình được kết nối thông qua SPI, tôi đã tìm kiếm khá kỹ trước khi tìm đúng chân cắm để kết nối chúng với ESP32, biết rằng tôi cũng cần một I2C cho cảm biến gia tốc, một chân để đọc DHT22 và 2 chân khác để đo điện áp pin. ESP32 gần như đã được sạc đầy! Biết rằng một số chân là chỉ đọc (tôi đã sử dụng chúng cho cảm biến DHT), những chân khác không thể được sử dụng cùng với Wifi, hơi phức tạp để tìm đúng cấu hình.

Hộp có thể được định hướng theo 4 hướng, cộng với phẳng. Tất cả những điều đó làm cho 4 * 2 + 2 = 10 loại thông tin có thể hiển thị chỉ với 2 màn hình. Vì vậy, nó cho phép bạn hiển thị rất nhiều thứ:

  • Ngày, và vị thánh trong ngày
  • Thời điểm hiện tại
  • Dự báo thời tiết hôm nay
  • Dự báo thời tiết cho những giờ tới
  • Dự báo thời tiết cho những ngày tới
  • Mức sạc pin
  • Và như tôi vẫn còn chỗ, một trích dẫn ngẫu nhiên từ một trang web chuyên ngành.

Bước 2: Bạn cần gì?

Bạn cần gì ?
Bạn cần gì ?
Bạn cần gì ?
Bạn cần gì ?
Bạn cần gì ?
Bạn cần gì ?
  • ESP32: Mô-đun Lolin32 (năng lượng rất thấp, được trang bị đầu nối pin, có thể sạc pin qua USB plus)
  • 2 màn hình epaper: 4,2 inch và 2,9 inch. Tôi đã chọn các mô hình từ cửa hàng Good Display.
  • Cảm biến DHT22
  • Gia tốc kế MCU6050 - cảm biến con quay hồi chuyển I2C
  • Pin LiPo
  • Để đo điện áp pin: 2 điện trở 10k, 1 điện trở 100k, 1 tụ điện 100nF, 1 bóng bán dẫn MOSFET
  • Hàn và mỏ hàn, bảng mạch in
  • Quyền truy cập vào máy in 3D cho trường hợp

Hình ảnh đính kèm cho thấy vị trí của tất cả các thành phần trên PCB: Tôi đã phải tiết kiệm không gian để đặt vừa hộp đựng, không nên quá lớn.

Để nhận dữ liệu thời tiết, bạn cũng cần đăng ký trên API thời tiết và đặt các khóa của mình vào đúng vị trí trong tệp 'Variables.h' (xem bên dưới).

Các trang web về thời tiết:

  • apixu
  • acquy

Bước 3: Dự án này khiến tôi phải suy nghĩ và học hỏi được rất nhiều điều…

Dự án này đã khiến tôi phải suy nghĩ và học hỏi rất nhiều…
Dự án này đã khiến tôi phải suy nghĩ và học hỏi rất nhiều…
Dự án này đã khiến tôi phải suy nghĩ và học hỏi rất nhiều…
Dự án này đã khiến tôi phải suy nghĩ và học hỏi rất nhiều…
Dự án này đã khiến tôi phải suy nghĩ và học hỏi rất nhiều…
Dự án này đã khiến tôi phải suy nghĩ và học hỏi rất nhiều…

Hệ thống này được cho là có công suất thấp, do đó bạn không cần phải sạc pin mỗi đêm… Để tiết kiệm năng lượng, tôi đã chọn các màn hình e-paper giữ được màn hình ngay cả khi chúng không còn được cấp nguồn. Tương tự như vậy đối với ESP32, tôi chọn mô-đun Lolin32 (nổi tiếng về sự tiết kiệm của nó) và tôi phải học cách quản lý giấc ngủ sâu và tiếng gọi báo thức khi bị gián đoạn do gia tốc kế tạo ra.

Hộp có thể được định hướng theo 4 hướng, phẳng hơn. Tất cả những điều đó làm cho 4 * 2 + 2 = 10 loại thông tin có thể hiển thị. Vì vậy, nó cho phép bạn làm rất nhiều thứ: ngày, và thánh của ngày, giờ, dự báo thời tiết hôm nay, dự báo thời tiết cho những giờ hoặc ngày tới, mức sạc pin và một báo giá ngẫu nhiên từ một trang web chuyên biệt.

Có rất nhiều thứ để tìm kiếm trên Internet và như bạn biết: WiFi là kẻ thù của việc tiết kiệm năng lượng…

Vì vậy, chúng ta phải quản lý kết nối, để hiển thị thông tin cập nhật nhưng không tốn quá nhiều thời gian kết nối. Một vấn đề khá phức tạp khác: giữ một thời gian khá chính xác. Tôi không cần RTC vì tôi có thể tìm thấy thời gian trên internet, nhưng đồng hồ bên trong của ESP32 bị trượt khá nhiều, đặc biệt là trong thời gian ngủ. Tôi phải tìm cách giữ đủ chính xác, trong khi chờ đặt lại đồng hồ bằng Internet. Tôi đồng bộ hóa lại nó trên internet mỗi giờ.

Vì vậy, có một sự đánh đổi giữa quyền tự chủ (tần suất kết nối Internet) và độ chính xác của thông tin hiển thị.

Một vấn đề khác cần giải quyết là bộ nhớ. Khi ESP32 ở trạng thái ngủ sâu, bộ nhớ sẽ bị mất, ngoại trừ phần được gọi là RAM RTC. Bộ nhớ này rộng 4MB, trong đó chỉ có 2 MB có thể được sử dụng cho chương trình. Trong bộ nhớ này, tôi phải lưu trữ các biến chương trình khác nhau phải được lưu giữ từ lần thực thi này sang lần thực hiện tiếp theo, sau giai đoạn ngủ: dự báo thời tiết, ngày giờ, tên tệp biểu tượng, dấu ngoặc kép, v.v. Tôi phải học cách đối phó với nó.

Nói về các biểu tượng, chúng được lưu trữ trong SPIFFS, hệ thống tệp ESP32. Sau khi đóng API thời tiết Wunderground miễn phí, tôi phải tìm kiếm các nhà cung cấp dữ liệu thời tiết miễn phí khác. Tôi đã chọn hai: một cho thời tiết của ngày hiện tại, với dự báo 12 giờ và một cho dự báo nhiều ngày. Các biểu tượng không giống nhau, vì vậy nó gây ra cho tôi hai vấn đề mới:

  • Chọn một bộ biểu tượng
  • Khớp các biểu tượng này với mã dự báo của 2 trang web

Thư từ này cũng đã được lưu trữ trong RAM RTC để không phải tải lại mỗi lần.

Vấn đề cuối cùng với các biểu tượng. Không thể lưu trữ tất cả chúng trong SPIFFS. Dung lượng quá nhỏ cho tất cả các tệp của tôi. Nó là cần thiết để thực hiện nén hình ảnh. Tôi đã viết một tập lệnh bằng Python để đọc các tệp biểu tượng của tôi và nén chúng thành RLE, sau đó lưu trữ các tệp nén trong SPIFFS. Nó đã được tổ chức.

Nhưng thư viện hiển thị e-paper chỉ lấy các tệp loại BMP, không phải ảnh nén. Vì vậy, tôi đã phải viết một hàm bổ sung để có thể hiển thị các biểu tượng của tôi từ các tệp nén này.

Dữ liệu đọc trên internet thường ở định dạng json: dữ liệu thời tiết, Saint of the day. Tôi sử dụng thư viện arduinoJson (tuyệt vời) cho việc này. Nhưng trích dẫn không phải như vậy. Tôi lấy chúng từ một trang web chuyên dụng, vì vậy tôi phải đọc chúng bằng cách nhìn trực tiếp vào nội dung của trang web. Tôi đã phải viết một mã cụ thể cho điều đó. Mỗi ngày, vào khoảng nửa đêm, chương trình truy cập trang web này và đọc khoảng mười câu trích dẫn ngẫu nhiên, và lưu trữ chúng trong RAM RTC. Một cái được hiển thị ngẫu nhiên trong số chúng khi nhà ở được hướng màn hình lớn lên trên.

Tôi chuyển cho bạn vấn đề hiển thị các ký tự có dấu (xin lỗi, nhưng dấu ngoặc kép là bằng tiếng Pháp)….

Khi màn hình nhỏ hướng lên, điện áp pin được hiển thị, có hình vẽ để nhìn rõ hơn mức còn lại. Nó là cần thiết để làm một lắp ráp điện tử để đọc điện áp pin. Vì phép đo không được xả pin, tôi đã sử dụng một sơ đồ tìm thấy trên internet, sử dụng một bóng bán dẫn MOSFET làm công tắc để chỉ tiêu thụ dòng điện khi thực hiện phép đo.

Để có thể tạo ra mạch này và lắp mọi thứ vào trong hộp mà tôi muốn nhỏ nhất có thể, tôi phải làm một PCB để kết nối tất cả các thành phần của hệ thống. Đây là PCB đầu tiên của tôi. Tôi thật may mắn vì mọi thứ đều hoạt động tốt trong lần đầu tiên ở bên này…

Xem bản đồ cấy ghép: "vùng cấm" là vùng dành riêng cho việc kết nối cáp USB. Mô-đun Lolin32 cho phép bạn sạc lại pin qua USB: pin được sạc nếu cáp USB được kết nối và mô-đun hoạt động cùng một lúc.

Điểm cuối cùng: phông chữ. Với các kích cỡ khác nhau, đậm hay không, chúng phải được tạo và lưu trữ. Thư viện Adafruit GFX xử lý rất tốt điều đó, khi bạn đã cài đặt các tệp phông chữ vào đúng thư mục. Để tạo các tệp, tôi đã sử dụng trang Chuyển đổi Phông chữ, rất tiện lợi!

Đảm bảo bạn chọn:

  • Màn hình xem trước: TFT 2.4"
  • Phiên bản thư viện: Adafruit GFX Font

Tóm lại: một dự án lớn, cho phép tôi học hỏi được rất nhiều điều

Bước 4: Sử dụng màn hình giấy điện tử

Sử dụng màn hình giấy điện tử
Sử dụng màn hình giấy điện tử

Nhược điểm chính của các màn hình này có thể nhìn thấy rõ trên video: việc cập nhật màn hình mất một hoặc hai giây và được thực hiện bằng cách nhấp nháy (hiển thị thay thế phiên bản bình thường và đảo ngược của hai màn hình). Điều này có thể chấp nhận được đối với thông tin thời tiết vì tôi không cập nhật nó thường xuyên (mỗi giờ ngoại trừ sự thay đổi hướng của hộp). Nhưng không phải cho thời gian. Đó là lý do tại sao (và để hạn chế mức tiêu thụ) tôi vẫn sử dụng màn hình HH: MM (không phải giây).

Vì vậy, tôi đã phải tìm một cách khác để cập nhật màn hình. Những màn hình này (một số trong số chúng) hỗ trợ cập nhật một phần (áp dụng cho một vùng của màn hình hoặc cho toàn bộ màn hình…) nhưng nó không tốt cho tôi vì màn hình lớn của tôi (hiển thị thời gian) giữ bóng mờ của các pixel được thay thế. Ví dụ: khi chuyển từ 10:12 đến 10:13, '2' hiển thị một chút bên trong '3' và nó thậm chí còn hiển thị rõ hơn sau '4', '5', v.v. Tôi muốn để chỉ ra rằng đây là trường hợp của màn hình của tôi: Tôi đã thảo luận với tác giả của thư viện hiển thị giấy điện tử GxEPD2, người nói với tôi rằng anh ta không quan sát hiện tượng này bằng màn hình của chính mình. Chúng tôi đã cố gắng thay đổi các thông số mà không thành công trong việc săn ma.

Vì vậy, chúng tôi phải tìm một giải pháp khác: Tôi đề xuất làm mới một phần hai lần, giải quyết được vấn đề (ít nhất là nó hài lòng đối với tôi). Nhiều giờ trôi qua mà màn hình không nhấp nháy và không có bóng ma. Tuy nhiên, việc thay đổi không diễn ra ngay lập tức: phải mất hơn một giây để thay đổi thời gian.

Bước 5: Làm nó

Lam no
Lam no
Lam no
Lam no
Lam no
Lam no
Lam no
Lam no

Để đảm bảo rằng không có gì di chuyển bên trong khi hướng thay đổi, các thành phần khác nhau (màn hình, mô-đun điện tử, PCB, pin) được dán bằng súng bắn keo. Để định tuyến các dây bên dưới PCB, tôi đã lắp nó vào các chân được làm bằng miếng đệm, tương tự với pin.

Sắp tới tôi sẽ lắp thêm đầu nối micrô USB bên ngoài để không phải mở vỏ máy để sạc lại pin.

Có lẽ tôi cũng sẽ quan tâm đến việc cập nhật bởi OTA để hoàn thiện tất cả….

Bước 6: Mã và tệp

Image
Image

Ba tệp lưu trữ được cung cấp:

  • Weather station.zip: mã Arduino, để tải lên bằng Arduino IDE
  • Boite ecran.zip: tệp CAD và máy in 3D cho vỏ máy
  • data.zip: các tệp sẽ được tải lên trong SPIFFS của ESP32.

Nếu bạn không biết cách tải tệp lên SPIFFS của ESP32, chỉ cần đọc hướng dẫn này, trình bày một plugin rất hữu ích và cách sử dụng nó trong Arduino IDE.

Lập trình giấc ngủ sâu khá khác với lập trình tiêu chuẩn của Arduino. Đối với ESP32, điều đó có nghĩa là ESP32 thức dậy và thực hiện thiết lập, sau đó chuyển sang chế độ ngủ. Vì vậy, hàm vòng lặp trống và không bao giờ được thực thi.

Một số giai đoạn khởi tạo chỉ được chạy một lần ở lần thực thi đầu tiên (chẳng hạn như lấy thời gian, dữ liệu thời tiết, báo giá, v.v.), do đó, ESP32 cần biết liệu lần đánh thức hiện tại có phải là lần đầu tiên hay không: đối với điều đó, giải pháp là lưu trữ một biến trong RAM RTC (vẫn hoạt động ngay cả trong giai đoạn ngủ sâu), biến này được tăng lên mỗi lần thức dậy. Nếu nó bằng 1 thì đó là lần thực thi đầu tiên và ESP32 chạy giai đoạn khởi tạo, nếu không thì giai đoạn này bị bỏ qua.

Để đánh thức ESP32, có một số khả năng:

  • Hẹn giờ đánh thức: mã tính toán thời gian của giấc ngủ sâu trước khi đi ngủ. Điều này được sử dụng để cập nhật thời gian (cứ sau 1, 2, 3 hoặc 5 phút) hoặc dữ liệu thời tiết (3 hoặc 4 giờ một lần) của các câu trích dẫn và vị thánh trong ngày (24 giờ một lần)
  • Đánh thức gián đoạn: gia tốc kế gửi một tín hiệu được sử dụng để đánh thức ESP32. Điều này được sử dụng để phát hiện sự thay đổi hướng và cập nhật màn hình
  • Đánh thức cảm biến cảm ứng: ESP32 được trang bị một số chân hoạt động như cảm biến cảm ứng, nhưng chúng không thể được sử dụng với đánh thức bộ hẹn giờ, vì vậy tôi đã không sử dụng nó.

Có các thủ thuật lập trình khác ở những nơi khác trong mã, để giữ thời gian chính xác trong khi tiết kiệm năng lượng (tức là không kết nối máy chủ NTP mỗi phút), để loại bỏ các dấu không được hỗ trợ bởi thư viện Adafruit GFX, để tránh cập nhật màn hình nếu không cần thiết, để thiết lập các thông số gia tốc kế đặc biệt cho việc đánh thức gián đoạn, tính toán chính xác thời gian đi ngủ trong trường hợp đánh thức bằng bộ hẹn giờ, tránh sử dụng bảng điều khiển Nối tiếp nếu không được kết nối với IDE (để tiết kiệm năng lượng trở lại), ngắt kết nối wifi khi không cần thiết, vv… và mã có đầy đủ các chú thích giúp hiểu các chức năng.

Cảm ơn vì đã đọc cuốn sách Có thể hướng dẫn này (cuốn sách đầu tiên của tôi). Tôi hy vọng bạn sẽ thích nó và thích làm trạm thời tiết này

Cuộc thi cảm biến
Cuộc thi cảm biến

Về nhì trong cuộc thi Cảm biến

Đề xuất: