Mục lục:

Bắt đầu với giao diện cảm biến I2C ?? - Giao diện MMA8451 của bạn bằng ESP32s: 8 bước
Bắt đầu với giao diện cảm biến I2C ?? - Giao diện MMA8451 của bạn bằng ESP32s: 8 bước

Video: Bắt đầu với giao diện cảm biến I2C ?? - Giao diện MMA8451 của bạn bằng ESP32s: 8 bước

Video: Bắt đầu với giao diện cảm biến I2C ?? - Giao diện MMA8451 của bạn bằng ESP32s: 8 bước
Video: [ESP32 #8] Sử dụng LCD - I2C - Ngôi Nhà IoT 2024, Tháng mười một
Anonim
Bắt đầu với giao diện cảm biến I2C ?? - Giao diện MMA8451 của bạn bằng ESP32s
Bắt đầu với giao diện cảm biến I2C ?? - Giao diện MMA8451 của bạn bằng ESP32s

Trong hướng dẫn này, bạn sẽ tìm hiểu tất cả về Cách khởi động, kết nối và thiết bị I2C (Gia tốc kế) hoạt động với bộ điều khiển (Arduino, ESP32, ESP8266, ESP12 NodeMCU)

Bước 1: Làm thế nào để bắt đầu với I2C - Thế giới tuyệt vời của giao tiếp liên vi mạch

Arduino, ESP Series, PIC, Rasberry PI, v.v. đều rất đáng kinh ngạc. Nhưng bạn sẽ làm gì với nó một khi bạn có?

Điều tốt nhất là thêm các cảm biến và những thứ đó. Ngày nay, rất nhiều công nghệ mới đang sử dụng giao thức I2C để cho phép máy tính, điện thoại, máy tính bảng hoặc vi điều khiển giao tiếp với các cảm biến. Điện thoại thông minh sẽ kém thông minh hơn nếu chúng không thể nói chuyện với cảm biến gia tốc kế đó để biết điện thoại của bạn đang quay về hướng nào.

Bước 2: Tổng quan về I2C

I2C là một giao thức truyền thông bán song công, đồng bộ, nối tiếp, cho phép cùng tồn tại nhiều chủ và nô lệ trên cùng một bus. Bus I2C bao gồm hai đường: đường dữ liệu nối tiếp (SDA) và đồng hồ nối tiếp (SCL). Cả hai dòng đều yêu cầu điện trở kéo lên.

SDA (Dữ liệu nối tiếp) - Đường truyền cho chủ và tớ để gửi và nhận dữ liệu. SCL (Serial Clock) - Dòng mang tín hiệu xung nhịp. Với những ưu điểm như đơn giản và chi phí sản xuất thấp, I2C chủ yếu được sử dụng để liên lạc với các thiết bị ngoại vi tốc độ thấp trong khoảng cách ngắn (trong vòng một foot).

Muốn tìm hiểu thêm về I2C? ……

Bước 3: Cách định cấu hình cảm biến I²C

Trước khi đi vào dự án, bạn cần hiểu một vài điều cơ bản về Cảm biến của mình. Vì vậy, hãy rót cho mình một tách cà phê trước khi lặn vào:)? …

Điểm mạnh của I2C là bạn có thể đặt rất nhiều cảm biến trên cùng một bốn dây. Nhưng đối với các thiết bị có một số mô-đun được tạo sẵn được kết nối, bạn có thể phải tháo một vài điện trở smd khỏi các điểm ngắt, nếu không việc kéo lên trên xe buýt có thể trở nên quá mạnh.

Chúng tôi muốn thông tin gì từ Datasheet ??

  1. Chức năng cảm biến
  2. Sơ đồ chân và chức năng ghim
  3. Mô tả giao diện (Đừng bỏ lỡ xem "Bảng lựa chọn địa chỉ I2c")
  4. Đăng ký !!

Mọi thứ đều tốt, bạn sẽ tìm thấy nó một cách dễ dàng nhưng Đăng ký ?? ĐĂNG KÝ chỉ đơn giản là vị trí bộ nhớ bên trong thiết bị I²C. Bản tóm tắt về số lượng thanh ghi có trong một cảm biến nhất định và những gì chúng kiểm soát hoặc chứa được gọi là bản đồ thanh ghi. Hầu hết thông tin trên biểu dữ liệu của cảm biến là về việc giải thích cách hoạt động của từng thanh ghi và chúng có thể là một câu khẩu hiệu để đọc qua vì thông tin hiếm khi được trình bày trực tiếp.

Để bạn hiểu ý tôi là: Có rất nhiều loại thanh ghi nhưng trong phần giới thiệu này, tôi sẽ nhóm chúng thành hai loại chung: Thanh ghi điều khiển và Thanh ghi dữ liệu.

1) Đăng ký kiểm soát

Hầu hết các cảm biến thay đổi cách chúng hoạt động dựa trên các giá trị được lưu trữ trong các thanh ghi điều khiển. Hãy coi các thanh ghi điều khiển như một dãy công tắc Bật / Tắt mà bạn bật bằng cách đặt một bit thành 1 và tắt bằng cách đặt bit đó thành 0. Cảm biến dựa trên chip I²C thường có hàng tá cài đặt hoạt động trở lên cho những thứ như bit- Chế độ, ngắt, điều khiển đọc-ghi, độ sâu, tốc độ lấy mẫu, giảm nhiễu, v.v., vì vậy bạn thường cần đặt các bit trong một số thanh ghi điều khiển khác nhau trước khi thực sự có thể đọc.

2) Thanh ghi dữ liệu Không giống như một thanh ghi điều khiển chuyển mạch ngân hàng, tôi nghĩ về các thanh ghi đầu ra dữ liệu như các vùng chứa chứa các số chỉ tình cờ được lưu trữ ở dạng nhị phân. Vì vậy, bạn muốn biết Dữ liệu, hãy luôn đọc các thanh ghi dữ liệu như tôi là ai để đăng ký nhận dạng thiết bị, Thanh ghi trạng thái, v.v.

Vì vậy, khởi tạo cảm biến I²C là một quá trình gồm nhiều bước và thứ tự hoạt động chính xác thường được giải thích bằng văn bản theo hướng ngược lại, thay vì đơn giản trong Datasheet. danh sách không bao giờ nói “Để đọc từ cảm biến này, hãy thực hiện (1), (2), (3), (4), v.v.”, nhưng bạn tìm thấy mô tả của các bit thanh ghi điều khiển cho biết “trước khi bạn đặt bit x trong này thanh ghi bạn phải đặt bit y trong thanh ghi điều khiển khác này”.

Tuy nhiên, tôi luôn thấy một bảng dữ liệu có tính tương tác hơn hầu hết các văn bản. nếu Bạn sẽ tham khảo nó cho một phần hoặc các phần thông tin cụ thể và nó cung cấp cho bạn tất cả các chi tiết, kết nối và tài liệu tham khảo. Chỉ cần ngồi xuống và đọc để lấy ra tất cả các tài liệu tham khảo của bạn.:)

Bước 4: Bắt đầu với chuyển động - Gia tốc kế

Gia tốc kế hiện đại là các thiết bị Hệ thống cơ điện tử siêu nhỏ (MEMS), có nghĩa là chúng có thể nằm gọn trên một con chip nhỏ bên trong các thiết bị nhỏ nhất. Một phương pháp để đo gia tốc được sử dụng bởi các gia tốc kế MEMS là sử dụng một khối lượng dẫn điện cực nhỏ treo trên các lò xo. Gia tốc của thiết bị làm cho lò xo dãn ra hoặc co lại, và độ lệch của khối dẫn điện có thể được đo thông qua sự thay đổi điện dung đối với các tấm cố định gần đó.

Gia tốc kế được chỉ định bởi các tính năng sau:

  1. Số lượng trục, từ một đến ba trục, được gắn nhãn X, Y và Z trong sơ đồ thông số kỹ thuật. Lưu ý rằng một số gia tốc kế được gọi là 6 trục hoặc 9 trục, nhưng điều đó chỉ có nghĩa là chúng được đi kèm với các thiết bị MEMS khác như con quay hồi chuyển và / hoặc từ kế. Mỗi thiết bị đó cũng có ba trục, đó là lý do tại sao có 3, 6 hoặc 9 trục Đơn vị đo lường quán tính (IMU).
  2. Loại đầu ra, tương tự hoặc kỹ thuật số. Gia tốc kế kỹ thuật số đảm nhận việc định dạng dữ liệu gia tốc thành một biểu diễn kỹ thuật số có thể được đọc ra qua I2C hoặc SPI.
  3. Phạm vi gia tốc được đo bằng g, trong đó 1g là gia tốc do trọng lực của Trái đất.
  4. Bộ đồng xử lý có thể giảm tải một số tính toán cần thiết để phân tích dữ liệu thô từ MCU. Hầu hết các máy đo gia tốc đều có một số khả năng ngắt đơn giản để phát hiện ngưỡng gia tốc (sốc) và điều kiện 0 g (rơi tự do). Những người khác có thể thực hiện xử lý nâng cao trên dữ liệu thô để cung cấp dữ liệu có ý nghĩa hơn cho MCU.

Bước 5: Giao diện với bộ điều khiển

Vì chúng tôi biết Bộ vi điều khiển ESP đang có xu hướng, chúng tôi sẽ sử dụng ESP32 cho ví dụ của chúng tôi. Vì vậy, trước tiên bạn cần một Nodemcu-32s.

Đừng lo lắng nếu bạn có bất kỳ bảng ESP nào khác hoặc thậm chí là Arduino !!! Bạn chỉ cần thiết lập Arduino IDE và cấu hình theo bảng Phát triển của bạn, cho Arduino, ESP NodeMCU, ESP32s, v.v. Bạn cũng sẽ cần một số loại bộ phận I2C, thường là trên bảng đột phá. Trong hướng dẫn này, tôi sẽ sử dụng MMA8451 bảng đột phá gia tốc kế kỹ thuật số.

Và vài dây nhảy….

Bước 6: Kết nối

Kết nối
Kết nối

Và đây là một bố cục.

Tôi đã sử dụng kết nối sau từ mô-đun ở trên với mô-đun Nodemcu-32s của mình.

ESP32s - Mô-đun

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Hãy nhớ rằng hầu hết thời gian không phải tất cả các bảng phát triển (chủ yếu là trong ESP) đều có sơ đồ chân rõ ràng để giúp xác định chân nào được sử dụng !! Vì vậy, trước khi kết nối, hãy xác định chân chính xác của bảng để sử dụng chân nào cho SDA và SCL."

Bước 7: Mã

Điều này yêu cầu thư viện Adafruit

từ

Tải xuống, giải nén và bạn sẽ tìm thấy thư mục ví dụ, trong thư mục chỉ cần mở MMA8451demo trong IDE Arduino của bạn và ở đây bạn bắt đầu….

bạn sẽ thấy mã sau cho giao diện cảm biến MMA8451 với bộ điều khiển của bạn

#bao gồm

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * tham gia bus i2c với SDA = D1 và SCL = D2 của NodeMCU * / Serial.println ("Adafruit MMA8451 test!"); if (! mma.begin ()) {Serial.println ("Không thể bắt đầu"); trong khi (1); } Serial.println ("Đã tìm thấy MMA8451!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Phạm vi ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// Đọc dữ liệu 'thô' với số lượng 14 bit mma.read (); Serial.print ("X: / t"); Serial.print (mma.x); Serial.print ("\ tY: / t"); Serial.print (mma.y); Serial.print ("\ tZ: / t"); Serial.print (mma.z); Serial.println (); / * Nhận sự kiện cảm biến mới * / sự kiện sensor_event_t; mma.getEvent (& sự kiện); / * Hiển thị kết quả (gia tốc được đo bằng m / s ^ 2) * / Serial.print ("X: / t"); Serial.print (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Serial.print (event.acceleration.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Serial.print (event.acceleration.z); Serial.print ("\ t"); Serial.println ("m / s ^ 2"); / * Lấy hướng của cảm biến * / uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Portrait Up Front"); nghỉ; case MMA8451_PL_PUB: Serial.println ("Chân dung Up Back"); nghỉ; case MMA8451_PL_PDF: Serial.println ("Portrait Down Front"); nghỉ; case MMA8451_PL_PDB: Serial.println ("Portrait Down Back"); nghỉ; case MMA8451_PL_LRF: Serial.println ("Mặt trước bên phải ngang"); nghỉ; case MMA8451_PL_LRB: Serial.println ("Ngang Phải Quay lại"); nghỉ; case MMA8451_PL_LLF: Serial.println ("Ngang Trái Phía trước"); nghỉ; case MMA8451_PL_LLB: Serial.println ("Ngang Trái Quay lại"); nghỉ; } Serial.println (); chậm trễ (1000); }

Lưu, Xác minh và Tải lên ……

Mở màn hình nối tiếp và bạn sẽ thấy một cái gì đó như thế này, tôi đã di chuyển cảm biến về do đó có các kết quả khác nhau

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m / s ^ 2

Mặt trước bên trái ngang

X: -224 Y: -2020 Z: 3188

X: -5,10 Y: -3,19 Z: 7,00 m / s ^ 2

Chân dung lên phía trước

Nếu mọi thứ diễn ra như bình thường, thì bây giờ bạn đã có những kiến thức cơ bản về I2C và Cách kết nối thiết bị của bạn..

Nhưng thiết bị không hoạt động ?? !

Chỉ cần thực hiện bước tiếp theo ……

Bước 8: Làm cho thiết bị I2C của bạn hoạt động.

Các bước cơ bản để thiết bị I2C hoạt động

Hãy điều tra….

  • Đấu dây đúng.. (kiểm tra lại)
  • Chương trình đúng.. (Có, đó là ví dụ thử nghiệm..)

Bắt đầu với các giai đoạn để giải quyết…..

Giai đoạn 1: Chạy chương trình quét thiết bị I2C để kiểm tra địa chỉ thiết bị và đầu tiên thiết bị I2C của bạn là okey

Bạn có thể Tải xuống bản phác thảo và kiểm tra đầu ra.

Kết quả - Thiết bị đang hoạt động và địa chỉ Cảm biến chính xác

Máy quét I2C. Đang quét…

Địa chỉ tìm thấy: 28 (0x1C) Xong. Đã tìm thấy 1 thiết bị.

Giai đoạn 2: Kiểm tra thư viện cảm biến

Mở tệp Adafruit_MMA8451.h và tìm địa chỉ thiết bị

Kết quả - Địa chỉ khác với thiết bị của tôi ??.

/ * ================================================ ========================= ĐỊA CHỈ I2C / BITS --------------------- -------------------------------------------------- * / #define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Địa chỉ I2C MMA8451 mặc định, nếu A là GND, 0x1C / * của nó ========================= ================================================== * /

Thực hiện - Chỉnh sửa tệp từ notepad (thay đổi địa chỉ) + Lưu + Khởi động lại IDE

Nó hoạt động. Bạn có thể nhận được các bài đọc của mình.

Không….. ???

Giai đoạn 3: Kiểm tra Wire.begin có bị ghi đè không?

Mở tệp Adafruit_MMA8451.c và tìm Wire.begin.

Kết quả - Câu lệnh này bị ghi đè.

/ ************************************************* ************************* // *! @brief Thiết lập HW (đọc giá trị hệ số, v.v.) * / / ********************************** **************************************** / bool Adafruit_MMA8451:: begin (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Thực hiện - Chỉnh sửa tệp từ notepad (câu lệnh bình luận) + Lưu + Khởi động lại IDE

Và cuối cùng Thiết bị đang hoạt động☺…

Tôi gần như quá tải hướng dẫn này vì mục tiêu chính của nó là giải thích Cách bắt đầu, lấy dữ liệu từ biểu dữ liệu, kết nối và làm cho thiết bị I2C hoạt động với ví dụ rất cơ bản.

Đề xuất: