Khái niệm Internet Of Things ( IOT) là gì?
Khái niệm IOT
Internet of Things (IoT) là một mạng lưới kết nối, trong đó mỗi đồ vật và con người đều có định danh riêng, cho phép truyền tải và trao đổi thông tin qua một mạng duy nhất mà không cần tương tác trực tiếp IoT hình thành từ sự kết hợp của công nghệ không dây, vi cơ điện tử và Internet, tạo ra một hệ thống các thiết bị có khả năng kết nối với nhau và với thế giới bên ngoài để thực hiện các nhiệm vụ cụ thể.
IoT, hay Internet of Things, giúp mọi vật giao tiếp dễ dàng hơn, với ưu điểm nổi bật là khả năng phòng ngừa và cảnh báo mọi lúc, mọi nơi.
Những ứng dụng thực tế trong cuộc sống
Các ứng dụng của IoT trong đời sống rất phong phú và đa dạng Dưới đây là một số ứng dụng điển hình của IoT mà chúng ta có thể khám phá.
Smart Home là ứng dụng IoT được tìm kiếm nhiều nhất trên Google, mang đến nhiều tính năng tự động giúp nâng cao chất lượng cuộc sống Chẳng hạn, hệ thống có thể tự động bật máy điều hòa khi bạn sắp về nhà, tắt đèn khi bạn rời đi, mở khóa cửa cho người thân khi họ đến, và mở garage khi bạn lái xe về Những tiện ích này tạo ra sự thuận tiện và an toàn cho người sử dụng.
Vật dụng mang theo trên người - Có thể kể đến một số thiết bị như Dashbon
Mask là một chiếc tai nghe thông minh cho phép bạn thưởng thức âm nhạc với chất lượng âm thanh trung thực cao và xem phim HD thông qua máy chiếu ảo Ngoài ra, AMPL SmartBag là một chiếc ba lô tích hợp pin dự phòng, giúp sạc điện cho các thiết bị di động, bao gồm cả máy tính.
ESP8266 dòng chip được sử dụng phổ biến nhất hiện nay trong IOT
ESP8266 là một chip Wi-Fi 2.4GHz có khả năng lập trình, giá cả phải chăng, được sản xuất bởi công ty Espressif Systems của Trung Quốc Ra mắt lần đầu vào tháng 8 năm 2014, chip này đã nhanh chóng thu hút sự chú ý trong cộng đồng phát triển nhờ vào tính năng linh hoạt và khả năng kết nối dễ dàng.
Mô đun ESP-01, được sản xuất bởi AI-Thinker, nổi bật với khả năng kết nối Internet qua Wi-Fi nhanh chóng và tiêu thụ ít linh kiện Với mức giá hợp lý, ESP8266 mang đến nhiều tính năng ấn tượng Cộng đồng phát triển lớn mạnh trên toàn cầu cung cấp nhiều module lập trình mã nguồn mở, giúp người dùng dễ dàng tiếp cận và phát triển ứng dụng Tất cả các dòng chip ESP8266 hiện nay trên thị trường đều mang nhãn ESP8266EX, phiên bản nâng cấp của ESP8266.
Module và Board phát triển của ESP8266
ESP8266 yêu cầu một số linh kiện bổ sung để hoạt động, trong đó ăng-ten là phần khó khăn nhất, cần được sản xuất và kiểm tra bằng thiết bị hiện đại Để đơn giản hóa quá trình phát triển ứng dụng cho người dùng, nhiều module và board mạch phát triển đã xuất hiện trên thị trường Một số module và board phát triển phổ biến bao gồm
Hiện nay phiên bản sử dụng phổ biến nhất là ESP8266 12E.
Giới thiệu về module ESP 12E( NodeMCU V1)
Sơ đồ chân của ESP12E
NodeMCU V1.0 được phát triển dựa trên Chip WiFi ESP8266EX bên trong
Module ESP-12E cho phép kết nối WiFi nhanh chóng và đơn giản Board được trang bị IC CP2102, giúp giao tiếp dễ dàng với máy tính qua cổng Micro USB Ngoài ra, board còn có nút nhấn và đèn LED hỗ trợ thuận lợi trong quá trình học tập và nghiên cứu.
Với kích thước nhỏ gọn, linh hoạt board dễ dàng liên kết với các thiết bị ngoại vi để tạo thành project, sản phẩm mẫu một cách nhanh chóng
WiFi: 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n
Điện áp vào: 5V thông qua cổng USB
Số chân I/O: 11 (tất cả các chân I/O đều có Interrupt/PWM/I2C/One-wire, trừ chân D0)
Số chân Analog Input: 1 (điện áp vào tối đa 3.3V)
Giao tiếp: Cable Micro USB
Hỗ trợ bảo mật: WPA/WPA2
Tích hợp giao thức TCP/IP
Lập trình trên các ngôn ngữ: C/C++, Micropython, NodeMCU - Lua
Lập trình ESP 12E bằng Arduino IDE
ESP8266 12E là một lựa chọn tuyệt vời cho các dự án Wifi nhờ vào giá thành rẻ và tính dễ sử dụng Một trong những ưu điểm nổi bật của ESP8266 12E là khả năng lập trình bằng Arduino IDE Trước khi bắt tay vào các dự án với ESP8266, bài viết này sẽ hướng dẫn bạn cách cài đặt Arduino IDE để nạp code cho thiết bị.
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp
Cài đặt phần mềm arduino IDE và thư viện cho esp8266
Sau khi tải phần mềm Arduino IDE, hãy cài đặt như bình thường và mở chương trình Đừng quên cài đặt driver, file driver có sẵn trong bộ cài Để cài đặt thư viện và chức năng nạp code cho IDE, bạn cần thực hiện các bước sau:
Vào File→ Preferences, vào textbox Additional Board Manager URLs thêm đường link sau vào http://arduino.esp8266.com/stable/package_esp8266com_index.json
Click OK để chấp nhận
Tiếp theo vào Tool→Board→Boards Manager Đợi một lát để chương trình tìm kiếm Ta kéo xuống và click vào ESP8266 by
ESP8266 Community, click vào Install Chờ phần mềm tự động download và cài đặt
Hướng dẫn nạp chương trình cho ESP8266 12E:
Kết nối mudule ESP8266 -12E vào máy tính Vào Tool→Board→NodeMCU 1.0, chọn cổng COM tương ứng với module tương ứng
Chọn chế độ nạp Arduino as ISP và chọn cổng COM cho đúng nhé.Vậy là ta đã có môi trường lập trình cho esp8266 rất thân thiện
Sau khi kết nối ESP8266 với máy tính, các bạn có thể test code ESP8266 ở đây:
Code ở dưới test led trên board esp8266 12E ở chân 13 (D7 ) sáng tắt trong vòng 1 giây void setup() { pinMode(LED_BUILTIN, OUTPUT);
} void loop() { digitalWrite(LED_BUILTIN, HIGH); // bật led sáng 1 giây delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // tắt led 1 giây delay(1000); // wait for a second
Từ ví dụ đơn giản ở trên ta có thể bắt tay vào học lập trình cho ESP để làm những dự dán IOT có ứng dụng cao.
Bài học mẫu ứng dụng lập trình esp8266
Lập trình điều khiển ESP8266 12E bằng Arduino IDE
ESP8266 là một lựa chọn tuyệt vời cho các dự án Wifi nhờ vào giá thành rẻ và tính dễ sử dụng Đặc biệt, phiên bản ESP8266 V12E có thể lập trình bằng Arduino IDE Trong bài viết này, mình sẽ hướng dẫn cách cài đặt Arduino IDE để nạp code cho ESP8266, giúp các bạn khởi đầu những dự án thú vị.
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp ( Trong ví bài viết này tôi sử dụng ESP8266-V12E)
Cài đặt phần mềm arduino IDE và thư viện cho esp8266
Sau khi tải phần mềm Arduino IDE, bạn cần cài đặt và mở chương trình Để cài đặt thư viện và nạp code cho IDE, hãy thực hiện các bước sau đây.
Vào File→ Preferences, vào textbox Additional Board Manager URLs thêm đường link sau vào http://arduino.esp8266.com/stable/package_esp8266com_index.json
Click OK để chấp nhận
Tiếp theo vào Tool→Board→Boards Manager Đợi một lát để chương trình tìm kiếm Ta kéo xuống và click vào ESP8266 by
ESP8266 Community, click vào Install Chờ phần mềm tự động download và cài đặt
Hướng dẫn nạp chương trình cho ESP8266 12E:
Kết nối mudule ESP8266 -12E vào máy tính Vào Tool→Board→NodeMCU 1.0, chọn cổng COM tương ứng với module tương ứng
Chọn chế độ nạp Arduino as ISP và chọn cổng COM cho đúng nhé.Vậy là ta đã có môi trường lập trình cho esp8266 rất thân thiện
Sau khi kết nối ESP8266 với máy tính, các bạn có thể test code ESP8266 ở đây:
Code ở dưới test led trên board esp8266 12E ở chân 13 (D7 ) sáng tắt trong vòng 1 giây void setup() { pinMode(LED_BUILTIN, OUTPUT);
In the loop function, the built-in LED is activated by setting the voltage to HIGH, followed by a one-second delay Afterward, the LED is turned off by lowering the voltage to LOW, and another one-second delay is implemented This cycle of turning the LED on and off continues, creating a blinking effect.
Bật tắt led theo ý muốn bằng esp8266 12E
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp ( Trong ví bài viết này tôi sử dụng ESP8266-V12E)
Chân ( + ) của led được nối chân D3 ( tương ứng với chân số GPIO0 )
Chân ( ) của led được nối chân GND của ESP
// initialize digital pin 0 ( D3 ) as an output pinMode(0, OUTPUT);
The loop function continuously executes, turning the LED on by setting the voltage to HIGH for one second, followed by turning it off by setting the voltage to LOW for another second.
Bật tắt led bằng nút nhấn ( không lưu trạng thái)
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp ( Trong ví bài viết này tôi sử dụng ESP8266-V12E)
Chân ( + ) của led được nối chân D0 ( tương ứng với chân số GPIO16 )
Chân ( ) của led được nối chân GND của ESP
Chân D3 ( chân GPIO0 ) được nối với nút nhấn như hình dưới
Lập trình: int ledPin = 16; // LED connected to digital pin 16 ( D0) int btnPin = 0; // BUTTON connected to digital pin 0 ( D3)
//int ledState = LOW; void setup()
{ pinMode(ledPin, OUTPUT); // sets the digital pin as output pinMode(btnPin, INPUT); // sets the digital pin as input digitalWrite(btnPin, HIGH);
Bật tắt led bằng nút nhấn (lưu trạng thái)
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp ( Trong ví bài viết này tôi sử dụng ESP8266-V12E)
Chân ( + ) của led được nối chân D0 ( tương ứng với chân số GPIO16 )
Chân ( ) của led được nối chân GND của ESP
Chân D3 ( chân GPIO0 ) được nối với nút nhấn như hình dưới
Khai báo biến int nutnhan = 0 để định nghĩa chân số GIPO0 là nút nhấn (D3), và khai báo biến int led = 16, t = 0 cho đèn LED tại GIPO16 (tương ứng D0) Biến int status1 được sử dụng để lưu trữ các trạng thái của nút nhấn.
// viết hàm chống dội boolean chong_doi()// int char float ngoại trừ void
{ int sta =!digitalRead(nutnhan); // đọc trạng thái nút nhấn return sta;// khi co nhan nut la true
Serial.begin(9600); pinMode(nutnhan,INPUT); digitalWrite(nutnhan, HIGH); pinMode(led,OUTPUT);
//Serial.println(buttonState); status1 = chong_doi(); if(status1==true)
} while(status1==true){status1=chong_doi();}
Điều khiển relay bằng Esp8266 V_12E
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp ( Trong ví bài viết này tôi sử dụng ESP8266-V12E)
1 relay 5vd (1 hoặc 2) kênh mức cao
// the setup function runs once when you press reset or power the board void setup() {
// initialize digital pin 13 as an output pinMode(13, OUTPUT);// chân điều khiển relay là chân GIPO13 ( D7)
The loop function continuously executes, turning the relay on by setting digital pin 13 to HIGH for 5 seconds, then turning it off by setting the pin to LOW for 2 seconds.
Lưu ý: khi ra làm mô hình thực tế nên có nguồn cấp riêng cho module relay.
Hiển thị lên màn hình LCD bằng ESP8266 12E
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp ( Trong ví bài viết này tôi sử dụng ESP8266-V12E)
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x20 for a 16 chars and 2 line display void setup()
{ lcd.init(); // initialize the lcd
// Print a message to the LCD lcd.backlight(); lcd.print("Hello, world!");
Đọc giá trị cảm biến nhiệt độ LM35 và gửi lên thingspeak
Cảm biến nhiệt độ LM35 là một cảm biến tương tự phổ biến, thường được sử dụng trong các ứng dụng đo nhiệt độ thời gian thực, mặc dù vẫn có sai số lớn Với kích thước nhỏ gọn và giá thành phải chăng, LM35 mang lại nhiều lợi ích cho người sử dụng Đặc biệt, nhờ vào tính năng là cảm biến tương tự, giá trị đo được có thể dễ dàng truy cập thông qua hàm analogRead().
Nhiệt độ được xác định bằng cách đo hiệu điện thế ngõ ra của LM35
→ Nhiệt độ thay đổi tuyến tính: 10mV/°C Độ chính xác thực tế: 1/4°C ở nhiệt độ phòng và 3/4°C ngoài khoảng 2°C tới 150°C công suất tiêu thụ là 60uA
Cảm biến LM35 hoạt động bằng cách cho ra một giá trị hiệu điện thế nhất định tại chân Vout (chân giữa) ứng với mỗi mức nhiệt độ
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp ( Trong ví bài viết này tôi sử dụng ESP8266-V12E)
1 cảm biến nhiệt độ LM35
Đăng kí 1 tài thoản miễn phí trên thingspeak
Cài đặt trên thingspeak: sau khi đăng kí một tài khoản miễn phí ta được giao diện như sau và ta chọn New
Sau đó ta thực hiện các thao tác sau:
Và ta được giao diện như hình sau:
Và mã Writekey ta lấy từ đây:
To connect to the Thingspeak API, set the `apiWritekey` to "VXMLHG2R6DDPUCNT", and configure your Wi-Fi credentials by specifying the `ssid` as "coffee" and the `password` as "coffee" The server address should be set to "api.thingspeak.com" Additionally, calculate the `resolution` using the formula 3.3/1023, where 3.3 represents the supply voltage and 1023 is the maximum analog read value.
WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500);
Serial.print("NodeMcu connected to wifi ");
A0 OUT void loop() { float temp = (analogRead(A0) * resolution) * 100; if (client.connect(server,80))
To send data to ThingSpeak, concatenate the API write key with the temperature value, formatted as a string Begin the HTTP POST request by specifying the endpoint and headers, including the host, connection type, API key, content type, and content length The two carriage returns signal the end of the header fields and the start of the data, which includes the formatted string containing the temperature information.
Serial.println("uploaded to Thingspeak server ");
Serial.println("Waiting to upload next reading ");
// thingspeak needs minimum 15 sec delay between updates delay(15000);
Sau khi upload code ta mở cổng serial monitor và thingspeak: và được kết quả như sau
Điều khiển thiết bị điện bằng webserver
1 x ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp ( Trong ví bài viết này tôi sử dụng ESP8266-V12E)
#include const char* ssid = "Truong Phi"; const char* password = "01695304802";
Serial.begin(115200); delay(10); pinMode(5, OUTPUT); pinMode(4, OUTPUT); pinMode(0, OUTPUT); pinMode(16, OUTPUT); digitalWrite(5, LOW); digitalWrite(4, LOW); digitalWrite(0, LOW); digitalWrite(16, LOW);
WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500);
// Start the server server.begin();
Serial.print("Use this URL to connect: ");
// Check if a client has connected
WiFiClient client = server.available(); if (!client) { return;
// Wait until the client sends some data
Serial.println("new client"); while(!client.available()){ delay(1);
// Read the first line of the request
Serial.println(request); client.flush();
// Match the request if (request.indexOf("/light1on") > 0) { digitalWrite(5, HIGH);
} if (request.indexOf("/light1off") >0) { digitalWrite(5, LOW);
} if (request.indexOf("/light2on") > 0) { digitalWrite(4, HIGH);
} if (request.indexOf("/light2off") >0) { digitalWrite(4, LOW);
} if (request.indexOf("/light3on") >0) { digitalWrite(0, HIGH);
} if (request.indexOf("/light3off") > 0) { digitalWrite(0, LOW);
} if (request.indexOf("/light4on") > 0) { digitalWrite(16, HIGH);
} if (request.indexOf("/light4off") > 0) { digitalWrite(16, LOW);
// Set ledPin according to the request
To control electrical devices using the ESP8266 12E, the server sends an HTTP response with a status of 200 OK and specifies the content type as HTML The HTML document begins with a DOCTYPE declaration, followed by the opening HTML and head tags, which include meta tags for mobile web app capabilities The body of the document is set with a background color of #f7e6ec, and it features horizontal rules along with a centered heading that introduces the device control functionality.
This article provides a user-friendly interface for controlling multiple devices, specifically four lights Each device has dedicated buttons for turning it on or off, allowing for easy management Users can simply click on the "Turn On" or "Turn Off" buttons for Device 1, Device 2, Device 3, and Device 4 The layout is organized and visually appealing, with each device's controls centered on the page for quick access This setup enhances the user experience by facilitating seamless operation of smart lighting systems.
{ client.print("Light 1 is ON");
{ client.print("Light 1 is OFF");
} client.println(""); if (digitalRead(4))
{ client.print("Light 2 is ON");
{ client.print("Light 2 is OFF");
} client.println(""); client.println(""); if (digitalRead(0))
{ client.print("Light 3 is ON");
{ client.print("Light 3 is OFF");
{ client.print("Light 4 is ON");
{ client.print("Light 4 is OFF");
} client.println(""); client.println(""); client.println(""); client.println(""); delay(1);
Sau khi upload chương trình thành công ta mở cổng serial monitor lên:
Từ hình trên ta được địa chỉ ip để truy cập webserver để điều khiển thiết bị điện là :
192.168.100.11 địa chỉ sẽ khác đi tùy vào router wifi nữa nhé
Ta nhập địa chỉ ip vào trình duyệt và cho ra giao diện giống hình dưới
Hình điều khiển thực tế
Điều khiển thiết bị điện bằng wifi và app MIT invertor
Phần mền cần chuẩn bị
App inverter (được đính kèm trong file code)
Phần cứng cần chuẩn bị:
1 Điện thoại sử dụng hệ điều hành android
4 Led ( các bạn có thể thay thế bằng relay để đóng ngắt thiết bị điện)
#include const char* ssid = "Truong Phi"; //Identifier is the name of your WIFI const char* password = "xxxxxxxxx"; // Your Wifi password int R1 int R2 int R3 int R4
WiFiServer server(80); //port is 80 void setup() {
Serial.begin(115200); delay(10); pinMode(R1, OUTPUT); pinMode(R2, OUTPUT); pinMode(R3, OUTPUT); pinMode(R4, OUTPUT); digitalWrite(R1,HIGH); digitalWrite(R2,HIGH); digitalWrite(R3,HIGH); digitalWrite(R4,HIGH);
WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500);
// Start the server server.begin();
Serial.print("Use this URL to connect: ");
Serial.print(WiFi.localIP()); //Gets the WiFi shield's IP address and Print the IP address of serial monitor
WiFiClient client = server.available(); if (!client) { return;
Serial.println("new client"); while(!client.available()){ delay(1);
The code snippet processes an HTTP request, checking if it contains the string "/Relay1On." If found, it activates Relay 1 by setting its corresponding pin low, responds with a "200 OK" status, and sends an HTML message indicating that "Relay 1 is ON" before stopping the client connection and introducing a brief delay.
The code snippet checks if the request contains "/Relay1Off" and, if true, it sets Relay 1 to OFF by writing a HIGH signal to R1 It then sends an HTTP response with a status of 200 OK, indicating successful processing, and includes an HTML message stating "Relay 1 is OFF" before stopping the client connection and introducing a brief delay.
To control Relay 2 via HTTP, the code checks if the request contains "/Relay2On" If it does, it sets Relay 2 to LOW, sends a 200 OK response, and displays a simple HTML message indicating that Relay 2 is ON After sending the response, the client connection is stopped, and a brief delay is implemented.
The code snippet handles an HTTP request to turn off Relay 2, indicated by the endpoint "/Relay2Off" When this request is received, the relay is switched off by setting the digital pin R2 to HIGH The server then responds with a status of "200 OK" and sends a simple HTML message stating "Relay 2 is OFF" before closing the connection.
When the request contains "/Relay3On", the system activates Relay 3 by setting it to LOW It then responds with an HTTP 200 OK status, indicating a successful request, and sends an HTML message confirming that "Relay 3 is ON" before closing the client connection and pausing briefly.
The code snippet checks if the request contains "/Relay3Off" and, if true, sets Relay 3 to OFF by writing a HIGH signal It then responds to the client with an HTTP 200 OK status and sends a simple HTML message indicating that "Relay 3 is OFF" before stopping the client connection and introducing a brief delay.
The code snippet activates Relay 4 when the request includes "/Relay4On", sending an HTTP response with a status of 200 OK and a content type of text/html It generates a simple HTML page indicating that "Relay 4 is ON" before closing the client connection and introducing a brief delay.
The code snippet handles an HTTP request to turn off Relay 4 When the request contains "/Relay4Off", it sets Relay 4 to a HIGH state, indicating it's off, and responds with a 200 OK status The response includes HTML content that confirms Relay 4 is OFF before closing the client connection and introducing a brief delay.
Cài đặt app cho điện thoại ( Andriod):
Viết app mit inverter (có file kèm theo), các bạn nên đăng kí một tài khoản trên web app mit invetor
Ta mở màn hình serial monitor nên và ta có được kết quả giống như dưới sau mỗi lần ta bật tắt
Điều khiển thiết bị điện bằng Nodemcu( esp8266 12E) và app Blynk
Phần mền cần chuẩn bị
App Blynk các bạn tải trên App Store hoặc CH play đều được
Phần cứng cần chuẩn bị:
1 Điện thoại sử dụng hệ điều hành android hoặc ISO
1 Led ( các bạn có thể thay thế bằng relay để đóng ngắt thiết bị điện)
Chân ( + ) của led được nối chân D3 ( tương ứng với chân số GPIO0 )
Chân ( ) của led được nối chân GND của ESP
Trước hết chúng ta phải tải về cài thư viện Blynk cho Arduino IDE, thư viện được kèm theo trong file code
Tiếp đến sau khi đã add thư viện blynk cho IDE ta mở code mẫu có sẵn trong thư viện như hình sau:
Và ta được code như sau:
To connect your ESP8266 to Blynk, begin by including the necessary library with `#include ` Next, define your authentication token as `char auth[] = "YourAuthToken";`, which you will receive via email after registering your project on Blynk Additionally, specify your Wi-Fi credentials with `char ssid[] = "YourNetworkName";` for the network name and `char pass[] = "YourPassword";` for the password Finally, implement the setup function to initialize your connection.
Blynk.begin(auth, ssid, pass);
Các bước thực hiện như sau: a) Tải app Blynk b) Đăng kí tài khoản trên blynk khi đăng nhập
Sau khi cài đặt ứng dụng và đăng ký tài khoản email, Blynk sẽ thông báo bạn đã đăng ký thành công Tiếp theo, bạn tiến hành tạo một dự án để bật tắt LED.
Ta thực hiện theo thứ tự như hình dưới:
Hình số 2 khi ta chọn OK thì blynk sẽ gửi về email đăng kí 1 mã token và ta lấy mã đó cho vào code IDE:
Tới hình số 6 là ta hoàn thành việc lập app trên Blynk d) Chỉnh sửa code:
#include char auth[] = "8b77ceab91c5406e99624623d2af0e3c"; char ssid[] = "Truong Phi"; char pass[] = "xxxxxxxx"; void setup()
Blynk.begin(auth, ssid, pass);
Hiển thị màn hình OLED với Nodemcu( esp8266 12E)
Phần mền cần chuẩn bị
Thư viện OLED : https://github.com/ThingPulse/esp8266-oled- ssd1306
Phần cứng cần chuẩn bị:
Trước hết chúng ta phải tải về cài thư viện OLED cho Arduino IDE, thư viện các bạn tải ở link trên nhé
SSD1306 display(0x3c, 4, 5); int thoi_gian = 0; void setup()
Serial.begin(115200); display.init(); display.setFont(ArialMT_Plain_10); display.drawString(0, 0, "Hello world"); display.display(); delay(1000); display.clear();
{ int gio, phut, giay; delay(1000); thoi_gian ++; gio = thoi_gian/3600; phut = (thoi_gian%3600)/60; giay = thoi_gian % 60; display.clear(); display.drawString(0, 0, String(gio) + ":" + String(phut) + ":" + String(giay)); display.display();
Gửi thông báo về điện thoại khi có trộm bằng cảm biến chuyển động sử dụng
động sử dụng board NodeMCU và app BLYNK
Gửi thông báo về điện thoại khi có trộm vào nhà
Phần mền cần chuẩn bị
Cài đặt phần mềm arduino IDE
Cài đặt app blynk vào điện thoại
Phần cứng cần chuẩn bị:
1 module cảm biến chuyển động
Code chương trình: https://drive.google.com/open?idsZXBW4QHBffT-LyULQgI1fYuXiUVoIo
To set up a Blynk project, first define the BlynkTimer and authentication token, which is sent to your email upon project creation Next, configure your Wi-Fi credentials by specifying the SSID and password for your home network Initialize a status variable and set the LED pin to 5, followed by implementing a notification function for alerts.
Blynk.begin(auth, ssid, pass); pinMode(12,INPUT_PULLUP);//D6 pinMode(5,INPUT_PULLUP); timer.setInterval(1000L,canhbao);
Upload code cho Nodemcu ( trước khi upload phải chọn giống như hình dưới)
Cài app blynk cho điện thoại:
Bước 1: Tải app blynk trên CH play hoặc App Store
Bước 2: Mở app lên đăng kí tài khoản miễn phí bằng email sau đó chọn NEW PROJECT
Bước 3: Lập app như hình dưới
Bước 4: Chọn vào nút OK sau đó dùng tay trượt theo dấu mũi tên
Bước 5: Chọn đến mục như hình ở dưới
Bước 6: Chọn vào hình tam giác như hình dưới để chuyển qua chế độ online
Sau khi hoàn thiện app và upload chương trình cho board NodeMCU chúng ta thử test:
Tin nhắn gửi về điện thoại thông qua app blynk như sau:
Điều khiển LED ma trận Max7219 với module WIFI NodeMCU
Lập trình chạy chữ led ma trận Max7219 sử dụng module Wifi
Phần mền cần chuẩn bị
Cài đặt phần mềm arduino IDE
Phần cứng cần chuẩn bị:
1 module led ma trận Max7219 (32x8)
Code chương trình: https://drive.google.com/open?idk3z4h7CQalLODKQOUCFj8AzO_tVpC7J
#include const char* ssid = "Trinh Quang Nam."; // Thay đôi tên wifi const char* password = "bubu123789"; // Thay đổi pass wifi
// TCP server at port 80 will respond to HTTP requests
WiFiServer server(80); const uint8_t LEDMATRIX_CS_PIN = 15;
// Define LED Matrix dimensions (0-n) - eg: 32x8 = 31x7 const int LEDMATRIX_WIDTH = 31; const int LEDMATRIX_HEIGHT = 7; const int LEDMATRIX_SEGMENTS = 4;
LEDMatrixDriver lmd(LEDMATRIX_SEGMENTS, LEDMATRIX_CS_PIN); void displayText ( char * theText)
{ if ( myTime + ANIM_DELAY < millis())
// Draw the text to the current position drawString(theText, len, x, 0);
// In case you wonder why we don't have to call lmd.clear() in every loop: The font has a opaque (black) background
// Toggle display of the new framebuffer lmd.display();
// Advance to next coordinate if( x < len * -8 )
* This function draws a string of the given length to the given position
*/ void drawString(char* text, int len, int x, int y )
{ for( int idx = 0; idx < len; idx ++ )
// stop if char is outside visible area if( x + idx * 8 > LEDMATRIX_WIDTH ) return;
// only draw if char is visible if( 8 + x + idx * 8 > 0 ) drawSprite( font[c], x + idx * 8, y, 8, 8 );
* This draws a sprite to the given position using the width and height supplied (usually
*/ void drawSprite( byte* sprite, int x, int y, int width, int height )
// The mask is used to get the column bit from the sprite row byte mask = B10000000; for( int iy = 0; iy < height; iy++ )
{ for( int ix = 0; ix < width; ix++ )
//Yes my font is backwards so I swap it around
//lmd.setPixel(x + ix, y + iy, (bool)(sprite[iy] & mask )); lmd.setPixel(x + (width - ix), y + iy, (bool)(sprite[iy] & mask ));
// shift the mask by one pixel to the right mask = mask >> 1;
Sau khi nạp code chương trình cho NodeMCU thì trên màn hình led sẽ xuất hiện địa chỉ IP, ví dụ : 192.168.1.70
Khi sở hữu địa chỉ IP, người dùng có thể sử dụng máy tính hoặc điện thoại để truy cập vào địa chỉ đó, từ đó điều khiển dòng chữ hiển thị trên màn hình LED ma trận.
Đọc giá trị nhiệt độ, độ ẩm hiển thị lên màn hình oled 0.96” và blynk sử dụng
blynk sử dụng board NodeMCU
Đọc và hiển thị giá trị nhiệt độ và độ ẩm hiển thị màn hình oled và blynk
Phần mền cần chuẩn bị
Cài đặt phần mềm arduino IDE
Cài đặt app Blynk cho điện thoại
Phần cứng cần chuẩn bị:
Code chương trình: https://drive.google.com/file/d/1oHGKSNTXN-FSvqPlGY8R3EW07s5VwO_H/view?usp=drive_open
// You should get Auth Token in the Blynk App char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// Set password to "" for open networks char ssid[] = "Trinh Quang Nam."; char pass[] = "bubu123789";
#define DHTPIN 4 // what pin we're connected to
// Initialize the OLED display using Wire library
// Initialising the UI will init the display too display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_16); display.setTextAlignment(TEXT_ALIGN_LEFT); dht.begin(); // initialize dht
Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8080); timer.setInterval(1000L, sendSensor);
} void displayWeather(){ float h = dht.readHumidity();
// Read temperature as Celsius float t = dht.readTemperature();
// Read temperature as Fahrenheit float f = dht.readTemperature(true); if (isnan(h) || isnan(t) || isnan(f)){ display.clear(); // clearing the display display.drawString(5,0, "DHT Failed!"); return;
} display.clear(); display.drawString(30, 0, "Weather"); display.drawString(0, 20, "Humidity: " + String(h) + "%\t"); display.drawString(0, 40, "Temp: " + String(t) + "°C");
//Uncomment to get temperature in farenheit
Blynk.run(); // Running the blynk code displayWeather(); //Calling back the displayWeather function display.display(); timer.run();
{ float h = dht.readHumidity(); //Read the humidity float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!"); return;
// You can send any value at any time
// Please don't send more that 10 values per second
Bước 1: Tải app blynk trên CH play hoặc App Store
Bước 2: Mở app lên đăng kí tài khoản miễn phí bằng email sau đó chọn NEW PROJECT
Bước 3: Lập app như hình dưới
Bước 4: Chọn vào nút OK mã token sẽ được gửi vào email sau đó dùng tay trượt theo dấu mũi tên
Bước 5: Chọn đến mục như hình ở dưới ( chọn 2 lần )
Bước 6: Chọn vào hình chữ nhật như hình dưới và thay đổi thông tin giồng hình
Bước 7: Chọn vào hình chữ nhật như hình dưới và thay đổi thông tin giồng hình
Bước 8: Chọn vào hình tam giác như hình dưới để chuyển qua chế độ online
Thiết kế xe robot 4 bánh điều khiển bằng sóng Wifi ( nodemcu )
Điều khiển xe robot 4 bánh bằng sóng wifi sử dụng NodeMCU
Phần mền cần chuẩn bị
Cài đặt phần mềm arduino IDE
Đăng kí 1 tài khoản miễn phí trên MIT App Inventor 2
Phần cứng cần chuẩn bị:
Breadboard còn gọi testboard nhỏ
4 động cơ giảm tốc v1 màu vàng
1 tấm mica 5mm ( 11cmx17cm)
Bước 1: Dùng keo nến đính đông cơ và bánh xe vào khung mica hoặc gỗ
Hai động cơ cùng 1 phía ta nối dây chung với nhau ( chạy song song ) Như mạch nguyên lý vẽ ở trên
Bước 2: Đính module L298N lên thân xe và kết nối ( GND GND nguồn dây màu đen), ( +12V + của nguồn pin dây màu đỏ)
Nối dây động cơ vào chân điều khiển động cơ của mạch L298N như sơ đồ nguyên lý ở trên
Bước 3: Đính board NodeMCU lên thân xe bằng keo nến và cấp nguồn +5V và gnd từ module L298N như sơ đồ nguyên lý ở trên
Bước 4: Upload chương trình cho board NodeMCU ( lưu ý: cách cài đặt board nodeMCU các bạn xem lại trang 323 nhé )
File code: https://drive.google.com/open?id=1RUhXB-QuqAqTa51-fleDk_PUfERC7Yfs
Trước hết các bạn phải add thư viện ESP8266WiFi cho phần mền IDE Thư viện kèm theo code.
#define ENA 14 // Enable/speed motors Right GPIO14(D5)
#define ENB 12 // Enable/speed motors Left GPIO12(D6)
#define IN_1 15 // L298N in1 motors Right GPIO15(D8)
#define IN_2 13 // L298N in2 motors Right GPIO13(D7)
#define IN_3 2 // L298N in3 motors Left GPIO2(D4)
#define IN_4 0 // L298N in4 motors Left GPIO0(D3)
String command; int speedCar = 800; // 400 - 1023 int speed_Coeff = 3; const char* ssid = "WIFI Car";
ESP8266WebServer server(80); void setup() { pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); pinMode(IN_1, OUTPUT); pinMode(IN_2, OUTPUT); pinMode(IN_3, OUTPUT); pinMode(IN_4, OUTPUT);
Serial.print("AP IP address: ");
Serial.println(myIP); server.on ( "/", HTTP_handleRoot ); server.onNotFound ( HTTP_handleRoot ); server.begin();
} void goAhead(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, HIGH); analogWrite(ENA, speedCar); digitalWrite(IN_3, LOW); digitalWrite(IN_4, HIGH); analogWrite(ENB, speedCar);
} void goBack(){ digitalWrite(IN_1, HIGH); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar); digitalWrite(IN_3, HIGH); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar);
} void goRight(){ digitalWrite(IN_1, HIGH); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar); digitalWrite(IN_3, LOW); digitalWrite(IN_4, HIGH); analogWrite(ENB, speedCar);
} void goLeft(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, HIGH); analogWrite(ENA, speedCar); digitalWrite(IN_3, HIGH); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar);
} void goAheadRight(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, HIGH); analogWrite(ENA, speedCar/speed_Coeff); digitalWrite(IN_3, LOW); digitalWrite(IN_4, HIGH); analogWrite(ENB, speedCar);
} void goAheadLeft(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, HIGH); analogWrite(ENA, speedCar); digitalWrite(IN_3, LOW); digitalWrite(IN_4, HIGH); analogWrite(ENB, speedCar/speed_Coeff);
} void goBackRight(){ digitalWrite(IN_1, HIGH); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar/speed_Coeff); digitalWrite(IN_3, HIGH); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar);
} void goBackLeft(){ digitalWrite(IN_1, HIGH); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar); digitalWrite(IN_3, HIGH); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar/speed_Coeff);
} void stopRobot(){ digitalWrite(IN_1, LOW); digitalWrite(IN_2, LOW); analogWrite(ENA, speedCar); digitalWrite(IN_3, LOW); digitalWrite(IN_4, LOW); analogWrite(ENB, speedCar);
In the loop function, the server processes client requests and retrieves the command from the "State" argument Depending on the command received, the robot can move in various directions: "F" for forward, "B" for backward, "L" for left, "R" for right, "I" for forward-right, "G" for forward-left, "J" for backward-right, and "H" for backward-left Additionally, the command can adjust the robot's speed with values ranging from "0" to "9," corresponding to speeds between 400 and 1023 The command "S" is used to stop the robot's movement.
} void HTTP_handleRoot(void) { if( server.hasArg("State") ){
Serial.println(server.arg("State"));
} server.send ( 200, "text/html", "" ); delay(1);
Trường hợp máy tính không nhận cổng COM ( PORT ) thì các bạn phải cài driver CP2102 hoặc CH340 tùy vào chip nạp của NodeMCU cho máy tính nhé
Bước 5: Tải app về cài cho điện thoại andriod
Link tải app được lưu trong file code các bạn nhé
Sau khi tải về và cài đặt ta được app như hình dưới
Bước 6: Lắp 3 pin 3.7V vào đế pin và bật công tắc ON/OFF lên.