Mục lục:
- Bước 1: Logic phần mềm: Kiến trúc hệ thống
- Bước 2: Bước 1: Kết nối phần cứng
- Bước 3: Bước 2: Arduino
- Bước 4: Bước 3: NodeJS
- Bước 5: Bước 4: Giao diện Web
- Bước 6: Kết quả
Video: Dự án Arduino: Điều khiển thiết bị điện tử qua Internet bằng trang web & cơ sở dữ liệu Nodejs + SQL.: 6 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:34
Dự án bởi: Mahmed.tech
Ngày thực hiện: 14 tháng 7 năm 2017
Mức độ khó: Người mới bắt đầu với một số kiến thức lập trình.
Yêu cầu phần cứng:
- Arduino Uno, Nano, Mega (Tôi nghĩ rằng hầu hết MCU có kết nối nối tiếp sẽ hoạt động)
- Đèn LED đơn & Điện trở hạn dòng. Sử dụng máy tính này nếu bạn không chắc chắn: Máy tính định luật Ohms
- Chiết áp 10K.
Yêu cầu phần mềm:
- Arduino IDE
- Node. JS (đây là phần mềm trên máy tính, cài đặt rất đơn giản)
- MySQL Server (cách dễ nhất mà tôi tìm thấy là sử dụng một máy chủ web giá rẻ. Bạn cũng có thể nhận được tên miền miễn phí)
Ngôn ngữ lập trình & kịch bản được sử dụng:
Arduino (Sửa đổi C / C ++), JavaScript (Nodejs), PHP, HTML & CSS
Tóm lại, dự án này: Điều khiển vi điều khiển Arduino từ giao diện web. Do đó kiểm soát bất kỳ thiết bị điện từ bất kỳ nơi nào có internet. Tôi muốn nâng cao hiểu biết của mình về lập trình và phát triển web và còn cách nào tốt hơn để làm điều này ngoài việc thực hiện một dự án đơn giản nhưng hiệu quả. Phần cứng được giữ ở mức tối thiểu để tôi có thể tập trung nhiều hơn vào phần mềm. Do đó, tôi đã đi với một đèn LED đơn giản, thiết lập nồi. Nồi sẽ gửi dữ liệu và led sẽ nhận (độ sáng PWM). Sử dụng NodeJS, dữ liệu nối tiếp đã được đọc (giá trị chiết áp) và ghi (độ sáng của đèn LED). Phần khó khăn của dự án này là lấy dữ liệu đầu vào từ một vị trí từ xa (máy chủ web)
Bước 1: Logic phần mềm: Kiến trúc hệ thống
Dữ liệu về chiết áp:
Điều này bắt đầu từ Arduino, giá trị nồi đọc là in nối tiếp. Tuy nhiên, lần này chúng ta sẽ sử dụng Node. JS để đọc giá trị. NodeJS sẽ mở giao tiếp nối tiếp đến cùng một cổng mà Arduino được kết nối và đọc giá trị nồi đã in. NodeJS sau đó sẽ tải dữ liệu lên cơ sở dữ liệu SQL từ xa, điều này sẽ xảy ra mỗi khi một giá trị pot mới được in. Một trang web sẽ kết nối với khoảng thời gian đặt cơ sở dữ liệu SQL và truy xuất giá trị chiết áp. Điều này sau đó sẽ được hiển thị trên trang web.
Dữ liệu dẫn:
Đối với đèn LED, độ sáng PWM sẽ được người dùng đặt trên một trang web từ xa, vì vậy hành trình của nó bắt đầu ở đầu đối diện của quang phổ. Dữ liệu đầu vào được lưu vào cơ sở dữ liệu SQL, mỗi khoảng thời gian đặt cơ sở dữ liệu sẽ được kiểm tra sự thay đổi trong PWM dẫn đầu, điều này được thực hiện bởi NodeJS. Nếu giá trị khác với giá trị trước đó thì giá trị mới sẽ được gửi đến Arduino thông qua một bus nối tiếp. Arduino thay đổi giá trị PWM đầu ra của đèn led để thay đổi độ sáng của nó.
Máy tính định luật Ohms sử dụng công thức V = IR và P = IV = I²R = V² / R Đối với dự án này, tôi sẽ sử dụng đèn LED màu xanh lam. Điều này rất quan trọng vì khi tần số ánh sáng tăng, điện áp giảm cũng tăng theo. Vì ánh sáng xanh lam có tần số cao hơn so với một thứ như đèn led đỏ. Điều này có nghĩa là một điện áp chuyển tiếp cao hơn. Tùy thuộc vào sản xuất, loại và kích thước, phạm vi làm việc sẽ khác nhau. Đối với thiết lập của tôi, tôi đã sử dụng một điện trở 220 Ω mắc nối tiếp, âm với đất và dương với chân PWM trên Arduino. Nồi đã được kết nối với một chân analog. Với 5VCC một đầu GND đầu kia và chân giữa được kết nối với chân tương tự (A0 trong trường hợp của tôi).
Bước 2: Bước 1: Kết nối phần cứng
Điều này rất đơn giản: Chỉ cần kết nối nối tiếp điện trở giới hạn dòng điện của bạn với đèn LED để đảm bảo rằng bạn được dẫn đúng cách. Một điểm sẽ đi đến GND trong khi một đầu khác sẽ đi đến chân Arduino. Đối với thiết lập của tôi, tôi đã sử dụng chân 12 cho led và A7 cho Pot. Tôi không có một sơ đồ vì mạch rất đơn giản của nó. Tuy nhiên, tôi đã tìm thấy điều này trực tuyến (hình ảnh)
Bước 3: Bước 2: Arduino
Đầu tiên, đèn led và nồi được kiểm tra xem chúng có hoạt động như mong đợi hay không. Điều này đã xảy ra bởi một chương trình đơn giản trong đó giá trị pot điều khiển dẫn đầu. Tôi đã sử dụng hàm ràng buộc để thay đổi phạm vi nồi từ 0 đến 1023 thành 0 đến 255, nhưng đơn giản / 4 cũng hoạt động. Giá trị pot được làm mịn bằng cách lấy giá trị trung bình trung bình từ 10 lần đọc liên tiếp, điều này là để loại bỏ các gai. (Tuy nhiên, việc làm mịn này gây ra sự cố với NodeJS vì vậy điều này đã bị xóa sau đó trong dự án - thêm về điều đó)
Mã Arduino
Đọc / Ghi nối tiếp Bước tiếp theo là lấy thông tin đầu vào của người dùng thông qua các cửa sổ màn hình nối tiếp được cung cấp bởi Arduino Ide để đặt độ sáng. Để làm điều này, serial.parseInt () được sử dụng để nhận một giá trị số nguyên và bỏ qua chuỗi. Ngoài ra, một kiểm tra lỗi được thêm vào mã. Phạm vi hợp lệ của giá trị PWM là 0 - 255, khi người dùng nhập> 255 thì nó sẽ gán giá trị 255 và nếu người dùng nhập giá trị hoặc <+/- 5, tôi đã thực hiện việc này để làm cho việc đọc ổn định hơn vì nó dao động. Tại sao đây là một vấn đề lớn liên quan đến cập nhật SQL, hãy nói thêm về điều đó sau.
Bước 4: Bước 3: NodeJS
Tôi sẽ không chỉ cho bạn cách lấy hoặc thiết lập và máy chủ SQL. Có rất nhiều hướng dẫn trên mạng.
Có 3 khía cạnh chính của chương trình NodeJS:
Đọc dữ liệu nối tiếp
Viết dữ liệu nối tiếp
Cập nhật cơ sở dữ liệu SQL
Để thực hiện kết nối nối tiếp trong NodeJS, phải tải xuống mô-đun gọi là cổng nối tiếp, có thể được thực hiện bằng lệnh npm. Mở CMD trên thư mục chứa chương trình NodeJS, cài đặt bằng cách gõ: npm install serialport Cũng phải cài đặt mô-đun SQL để có thể kết nối với cơ sở dữ liệu sql: npm install mysql NodeJS - Serial Port Bước đầu tiên của tôi với NodeJS chương trình là để đọc dữ liệu in và gửi độ sáng pwm đến Arduino. Điều này đã được thực hiện bằng cách mở kết nối nối tiếp tại cùng một cổng và cổng. Sau khi kết nối được thiết lập, tôi đọc các tin nhắn đến và in nó lên cửa sổ bảng điều khiển. Vấn đề được đặt ra khi tôi cố gắng ghi giá trị pwm để kiểm soát độ sáng.
Nó liên tục gặp lỗi: Port Not Open, giải pháp ban đầu của tôi là gọi hàm ghi khi có dữ liệu đến. Tuy nhiên, đây là một bản sửa lỗi tồi và tôi khá không hài lòng với giải pháp này, mặc dù nó hoạt động nhưng nó sẽ chỉ gửi khi giá trị nồi được thay đổi. Mã ví dụ cho mô-đun nối tiếp sẽ không hoạt động hoặc gây ra cùng một lỗi. Sau đó, tôi phát hiện ra chương trình đang cố gắng thực thi chức năng ghi mà không cần mở cổng, dẫn đến lỗi đó. Tôi đã giải quyết vấn đề này bằng cách sử dụng hàm setInterval ()
NodeJS - MySQL Thư viện MySQL đã được sử dụng (npm install MySQL) để kết nối với cơ sở dữ liệu SQL vì máy chủ ở một vị trí từ xa, địa chỉ IP của máy chủ được sử dụng thay vì localhost.
var con giữ thông tin kết nối ở định dạng JSON, khi kết nối đã được thực hiện thành công, cơ sở dữ liệu có thể được truy vấn. 2 hàm đã được tạo một hàm để cập nhật bảng, lựa chọn khác với các tham số tham gia truy vấn SQL. Bảng cập nhật được gọi khi nhận được giá trị nồi mới và truy vấn kiểm tra độ sáng sẽ chạy định kỳ.
Liên kết NodeJSCode
Bước 5: Bước 4: Giao diện Web
Giao diện web
Trang web chính được viết bằng PHP vì tôi đã có một số kinh nghiệm từ Cơ sở dữ liệu CO323 và mô-đun Web ở trường đại học. Bảng & biểu mẫu html được sử dụng để hiển thị dữ liệu sql.
Mã truy cập PHP SQL: Liên kết Cuộn đến phần giao diện web.
HTML & CSS * Mã trang web Javascript: Liên kết Cuộn xuống cuối
Trang web cuối cùng
Đề xuất:
Trạm thời tiết: ESP8266 Với chế độ Ngủ sâu, SQL, Vẽ đồ thị bằng Flask & Plotly: 3 bước
Trạm thời tiết: ESP8266 Với chế độ Ngủ sâu, SQL, Vẽ đồ thị bằng Flask & Plotly: Thật thú vị khi biết nhiệt độ, độ ẩm hoặc cường độ ánh sáng trên ban công của bạn phải không? Tôi biết tôi sẽ làm. Vì vậy, tôi đã tạo một trạm thời tiết đơn giản để thu thập dữ liệu như vậy. Các phần sau là các bước tôi đã thực hiện để xây dựng một. Hãy bắt đầu