Sử dụng cảm biến I²C với mọi Linux qua USB và IIO
I2C (nghĩa là SMBus) là một trong những giao diện có nhiều khả năng được sử dụng trên bo mạch chính của PC cũng như các thiết bị ngoại vi, do đó, trong khi kết nối các cảm biến I2C thường được kết hợp với các bộ vi điều khiển và SBC, thì rất đơn giản để sử dụng các cảm biến I2C đó từ . Do đó, việc vận hành các thiết bị của chúng ta, chẳng hạn như cảm biến nhiệt độ, áp suất và độ ẩm BME280 nổi tiếng hoặc cảm biến ánh sáng Si1145, sẽ trở nên đơn giản Show Cốt lõi của nó là MCU dựa trên AVR ATtiny85, cung cấp giao diện USB tích hợp, chạy chương trình cơ sở I2C-Tiny-USB và [Peter Molnar] mô tả chi tiết cách kết nối bộ điều hợp vật lý để thêm kết nối USB Chìa khóa ở đây là MCU xuất hiện với nhân Linux dưới dạng thiết bị i2c, yêu cầu tải trình điều khiển _________. Sau này, thiết bị I2C được kết nối với bus I2C của bộ điều hợp có thể được sử dụng thông qua lệnh gọi API của mô-đun Linux, trực tiếp hoặc thông qua trình điều khiển hiện có. Chẳng hạn, [Peter] phát hiện ra rằng trình điều khiển BMP280 được bao gồm trong Debian Sid Kết nối các cảm biến I2C là thứ thường được kết hợp với các bộ vi điều khiển và SBC, nhưng về cơ bản, rất dễ sử dụng các cảm biến I2C như vậy từ bất kỳ hệ thống nào chạy Linux. Xét cho cùng, I2C (tức là SMBus) là một trong những giao diện có khả năng cao được sử dụng trên bo mạch chính PC của bạn cũng như các thiết bị ngoại vi. Điều này có nghĩa là việc chạy các thiết bị của riêng chúng tôi như cảm biến nhiệt độ, áp suất và độ ẩm BME280 nổi tiếng hoặc cảm biến ánh sáng Si1145 sẽ rất dễ dàng Trong một bài đăng trên blog cách đây vài năm, [Peter Molnar] giải thích chi tiết cách kết nối bộ điều hợp vật lý để thêm giao diện I2C được kết nối USB vào hệ thống. Cốt lõi của nó là MCU dựa trên AVR ATtiny85, cung cấp giao diện USB tích hợp, chạy chương trình cơ sở I2C-Tiny-USB Phần thiết yếu ở đây là MCU hiển thị nhân Linux dưới dạng thiết bị i2c, yêu cầu trình điều khiển 1 được tải. Sau đó, thiết bị I2C được kết nối với bus I2C của bộ điều hợp có thể được sử dụng thông qua lệnh gọi API của mô-đun Linux, trực tiếp hoặc thông qua trình điều khiển hiện có. [Peter] thấy rằng trình điều khiển BMP280 đi kèm với Debian Sid chẳng hạn ghi chú. không có bảo hành. Đây là phần cứng, vì vậy nó có thể gây ra sự cố với hệ thống của bạn, đặc biệt nếu bạn làm đoản mạch thứ gì đó hoặc - như tôi đã làm một lần, nhiều mặt trăng trước đây - hàn nhanh tại sao thứ đó vẫn được kết nối với cổng USB. đừng làm thế Quá trình lắp ráp nguyên mẫu Digispark ATTiny85, Adaf nhung BME280 và Adaf nhung SI1145 PENTAX K-5 II s, 85. 0 mm, f/5. 6, 1/60 giây, ISO 800 ⋅ HD PENTAX-DA 16-85mm F3. 5-5. 6 ED DC WR ⋅ CC-BY-NC-ND-4. 0Bộ chuyển đổi USB I²CVài tháng trước, tôi đã viết về việc sử dụng Raspberry Pi với một số cảm biến I²C để thu thập dữ liệu cho Collectd. Mặc dù nó hoạt động tốt, nhưng nó khiến tôi nhận ra rằng để RPi chạy một hệ điều hành chính thức có nghĩa là tôi cần áp dụng các bản vá bảo mật cho một máy khác và đó không phải là điều tôi muốn giải quyết. Tôi cũng có một máy tính xách tay cũ, chạy dưới dạng NAS dựa trên ZFS, vậy tại sao không sử dụng nó? Sau khi mạo hiểm thử nghiệm không có kết quả để sử dụng cổng I²C trong đầu nối VGA, tôi đã xác minh rằng thực sự, như đã kết luận trong hướng dẫn, nó không hoạt động với đồ họa Intel nhúng trên linux Tôi bắt đầu xem xét bộ điều hợp USB I²C, nhưng chúng đắt tiền. Tuy nhiên, có một dự án trông rất hứa hẹn và nó cũng không yêu cầu Arduino chính thức. Cho đến I²C-Tiny-USB của Harbaum Nó sử dụng bo mạch ATtiny85 - đúng như tên gọi, nó rất nhỏ và hóa ra là một bộ chuyển đổi USB sang I²C hoàn toàn tốt. Bạn có thể mua một cái ở đây. https. //amzn. đến/2ubPs6I Ghi chú. có một Adaf nhung FT232H, theo lý thuyết, có khả năng làm điều tương tự. Tôi đã không kiểm tra nó Phần sụn I2C-Tiny-USBKho lưu trữ git đã chứa tệp 3 được tạo sẵn, nhưng trong trường hợp có bất kỳ sửa đổi nào cần thực hiện, đây là cách thực hiện
Đảm bảo rằng 4 không bị ghi chú; tiện ích flash micronucleusĐể flash tệp hex, bạn sẽ cần 5, một tiện ích flasher nhỏ
Chạy
sau đó kết nối thiết bị qua cổng USB và đợi kết thúc quá trình flash I²C trên linuxĐáng ngạc nhiên là Debian đã không hiển thị các trung tâm I²C trong 6 - rõ ràng là mô-đun hạt nhân cho điều này chưa được tải, vì vậy hãy tải nó và thực hiện tải đó vĩnh viễn
Kết nối Attiny85Thông thường, PC đã có một số lượng lớn bộ điều hợp I²C. Do đó, thiết bị mới sẽ hiển thị thêm một số thiết bị, số này khá quan trọng. Nhật ký hạt nhân có thể giúp xác định rằng ________số 8Để chỉ đọc số thiết bị
Ghi chú. số thiết bị có thể thay đổi sau khi khởi động lại. Đối với tôi, đó là 7 khi chỉ cần cắm vào và 8 nếu nó được kết nối trong khi khởi động lạiPhát hiện thiết bị I2C 9 là một chương trình kết xuất tất cả các thiết bị phản hồi trên bộ điều hợp I²C. Trang web Adaf nhung có một bộ sưu tập các cảm biến của họ. 8 sau 1 là số thiết bị được xác định ở bước trước và cho biết tôi có 2 thiết bị 5I²C 0x77. Cảm biến nhiệt độ, áp suất, độ ẩm BME280Đây là nơi mọi thứ trở nên thú vị. Thông thường, khi một cảm biến 2 hoạt động, mọi hướng dẫn sẽ bắt đầu sử dụng Python để thực hiện nhiệm vụ, với điều kiện là hầu hết các thư viện Adaf nhung đều bằng PythonĐừng hiểu sai ý tôi, đó là những lib tuyệt vời và các giải pháp Python rất tốt, nhưng thực hiện 3 đã dẫn đến điều này 8Cái nào để sử dụng? Vì vậy, tôi bắt đầu tìm hiểu trên internet, github và các nguồn khác, và bằng cách nào đó tôi nhận ra có một mô-đun hạt nhân, tên là 4. 5 là anh em của 2 - nó không có cảm biến độ ẩm. Vì vậy, các câu hỏi là. 7 là gì trên thế giới và tôi có thể sử dụng nó như thế nào?Hóa ra, ngoài 8, còn có một lớp thư viện cảm biến khác trong nhân linux, được gọi là Industrial I/O - iio. Nó đã được thêm tên này vào đâu đó vào năm 2012, khoảng 3. 15, và mục đích của nó là cung cấp một cảm biến tốc độ nhanh cho hệ thống con. Mặc dù tốc độ nhanh không phải là vấn đề đối với tôi vào thời điểm này, nhưng tôi tin tưởng vào chất lượng mã hạt nhânĐiều ngạc nhiên lớn nhất của tôi là mô-đun 5 thậm chí còn được bao gồm trong nhân Debian Sid như một mô-đun, và việc thêm nó chỉ là một 5Để thực sự kích hoạt thiết bị, bus i2c phải được thông báo về sự tồn tại của cảm biến 6Nhật ký 0 sẽ hiển thị một cái gì đó như thế này 0Xác minh thiết bị đang hoạt động 1Và đó là nó. 2 đã sẵn sàng để sử dụng 2Theo bảng dữ liệu 2, dưới các chế độ hoạt động được đề xuất (3. 5. 1 Theo dõi thời tiết), tỷ lệ lấy mẫu quá mức cho mỗi cảm biến phải là 1, vì vậy 3I²C 0x60. SI1145 Chỉ số UV, ánh sáng, cảm biến hồng ngoạiKhông giống như BME280, SI1145 không có mô-đun hạt nhân tích hợp sẵn trong Debian Sid - nhưng nó tồn tại dưới dạng mô-đun hạt nhân, đơn giản là nó không được bao gồm trong Nhân Debian. Tôi cũng đã học được rằng cảm biến này là một đối thủ hạng nặng và lẽ ra tôi nên mua thứ gì đó đơn giản hơn để chỉ đo ánh sáng; Nhưng tôi không sẵn sàng từ bỏ SI1145, là một cảm biến đắt tiền, vì vậy để có nó trong nhân, tôi phải biên dịch mô-đun nhân. Trước khi bắt đầu đảm bảo
Khi hai điều đó là đúng, hãy xác định phiên bản kernel 4Đầu ra chứa 3 - đó là phiên bản hạt nhân thực tế, không phải 4 là tên DebianLấy nhân; 5Khi đã xong và không có thông báo lỗi nào, hãy bật thiết bị 6________ 80 dài sẽ hiển thị một cái gì đó như thế này 7Xác minh thiết bị đang hoạt động 8Ghi chú. Tôi đã thử, những người khác đã thử, nhưng mặc dù về lý thuyết, có một cảm biến nhiệt độ trên SI1145, nhưng nó không hoạt động. Có vẻ như nó đọc giá trị khi khởi động, và thế là xong tập lệnh CLIĐể có chế độ xem nhanh, không thu thập hoặc các phụ thuộc khác, một tập lệnh như thế này là quá đủ 9Đầu ra 0Ghi chú. Tôi không hoàn toàn chắc chắn rằng đơn vị ánh sáng thực sự tính bằng lumen; thu thậpBước tiếp theo là thực sự thu thập các chỉ số cảm biến từ các cảm biến. Tôi vẫn đang sử dụng 7, một hệ thống thu thập số liệu nhỏ, cổ xưa nhưng ổn định và rất tốt, bởi vì nó là đủ. Nó ghi các tệp 8 thông thường, có thể được vẽ thành biểu đồ bằng các công cụ như Collectd Graph PanelThật không may, vẫn chưa có plugin iio cho colld (hoặc tôi chưa thể tìm thấy nó và nếu bạn đã tìm thấy, vui lòng cho tôi biết), vì vậy tôi phải thêm một tập lệnh shell cực kỳ đơn giản làm plugin exec cho colld 9 1 0 2Kết quả là Biểu đồ nhiệt độ BME280 trong Bảng đồ thị đã thu thậpĐo ánh sáng thô SI1145 trong Bảng đồ thị đã thu thậpkết luậnTầng I/O công nghiệp là thứ tôi mới nghe lần đầu, nhưng nó cực kỳ hứa hẹn. mã rõ ràng, nó đã hỗ trợ rất nhiều cảm biến và dường như có thể mở rộng tương đối dễ dàng Thật không may, đó là tài liệu ngắn gọn và tôi vẫn chưa tìm thấy bất kỳ công cụ thu thập số liệu nào hỗ trợ ngay lập tức, nhưng điều đó không có nghĩa là sẽ không có sớm Hiện tại tôi rất hài lòng với giải pháp USB I2C ngân sách của mình - việc không phải chạy Raspberry Pi để thu thập số liệu đơn giản chắc chắn là thắng và việc sử dụng các cảm biến trực tiếp từ nhân cũng có vẻ rất tốt |