Linh Kiện Điện Tử Nông Nghiệp

Linh Kiện Điện Tử Nông Nghiệp Shop linh kiện nông nghiệp NBN chuyên cung cấp linh kiện điện tử giá rẻ, nhận l?

ĐÃ BAO GIỜ BẠN XOAY TAY LÊN XUỐNG TRÁI PHẢI MÀ CÓ ĐỨA NÓ HIỂU HẾT BẠN MUỐN GÌ PHẢI KHÔNG❓ ĐÓ LÀ CÁCH THỨC HOẠT ĐỘNG CỦA ...
10/02/2023

ĐÃ BAO GIỜ BẠN XOAY TAY LÊN XUỐNG TRÁI PHẢI MÀ CÓ ĐỨA NÓ HIỂU HẾT BẠN MUỐN GÌ PHẢI KHÔNG❓ ĐÓ LÀ CÁCH THỨC HOẠT ĐỘNG CỦA CẢM BIẾN PAJ7620
✴️Hôm nay mình sẽ cùng tìm hiểu về cách cảm biến PAJ7620 nhận biết cử chỉ bàn tay (Cái này chưa làm được với khuôn mặt đâu nhé và tất nhiên không quan trọng là tay trái hay tay phải👍) rồi hiển thị lên LCD 16x2 xem nó như thế nào nhé
✴️Đầu tiên phải xem cảm biến cứ chỉ PAJ7620 có gì ❓
- Đầu tiên đến với công nghệ nhận dạng cử chỉ đó là một công nghệ sử dụng các cảm biến để đọc và giải thích các động tác của tay như lệnh.Từ đó chúng ta có thể sử dụng hệ thống nhận dạng cử chỉ trong các ứng dụng y tế hoặc điều khiển đèn, robot, giao diện người dùng, trò chơi bằng cách kết hơp với nhiều cảm biến khác.
- Đối vơi các cử chỉ xuất phát từ bất kỳ động tác hoặc tình trạng nào của cơ thể (có thể xuất phát từ khuôn mặt hoặc tay) thường sẽ truyền đi một thông điệp nào đó .Tuy nhiên để hiểu được thông điệp đó thì cảm biến cử chỉ PAJ7620 chỉ có thể nhận diện 9 loại cử chỉ tay
bao gồm
✔️ Lên
✔️Xuống
✔️Trái
✔️Phải
✔️Tiến
✔️Lùi
✔️Theo chiều kim đồng hồ
✔️ Ngược chiều kim đồng hồ
✔️Sóng tay.
- Điều quan trọng nhất là cảm biến PAJ7620 sử dụng giao diện I2C cực kì thông dụng vì vậy khả năng kết nối với Arduino các cảm biến khác.
- Với con cảm biến này chúng ta có thể điều khiển không chạm theo đúng nghĩa đen (không quá xa với khoảng cách tương tác là 50- 100mm) nhưng vẫn quá thích hợp với điều khiển nhà thông minh, xe hơi, y tế không tiếp xúc,.. hoặc có thể nhận lệnh trực tiếp từ robot luôn không cần đến con người nữa.
✴️Sau khi đã biết về cảm biến PAJ7620 thì mình cùng tìm hiểu về cách nối dây với Arduino Nano (vì toàn là kết nối I2C nên rất dễ nha mọi người) còn về Arduino và LCD I2C mình đã có bài rồi anh em xem ở đây nhé👉https://www.facebook.com/linhkiendientunongnghiep/posts/pfbid0i19cCNVQMdKfFvK9BfVSd71EErTpJg9hpr1eY7ynad1XQ3o1TDZzw45xXUjjfa3Xl
- Giờ sang phần đấu dây nào:
✔️Chân SDA (PAJ7620, LCD)- chân A4 của Arduino
✔️Chân SCL (PAJ7620, LCD)- chân A5 của Arduino
✔️Chân Vcc của PAJ7620- chân 3v3 của Arduino (mọi người lưu ý nhé)
✔️Chân Vcc của LCD 16x2- chân 5v của Arduino
⚠️Lưu ý: Mọi người nên giữ cảm biến PAJ7620 trên mặt phẳng để đảm độ chính xác và có 2 trường hợp với khả năng phát hiện:
✔️Khi tay ở gần khoảng cách 5-15 cm với góc 60° thì cảm biến sẽ phát hiện.
✔️Khi tay ở xa khoảng cách 15-30 cm với góc 30° thì cảm biến sẽ phát hiện.
✴️Sau khi setup xong thì chúng ta cùng đi vào phần code (tất nhiên là anh em phải đầy đủ thư viện paj7620.h và LiquidCrystal_I2C.h. Mình sẽ để code ở dưới mọi người tham khảo nhé👇

"paj7620.h"

LiquidCrystal_I2C lcd(0x27, 16, 2);

GES_REACTION_TIME 300 // Thời gian phản ứng bạn có thể thay đổi độ nhạy ở đây
GES_ENTRY_TIME 500 //Dể nhận biết tiến lên và lùi xuống thì phải để thời gian GES_ENTRY_TIME dưới 0.8s).
GES_QUIT_TIME 1000

void setup()
{
lcd.init();
lcd.backlight();
Serial.begin(9600);

Serial.println("\nPAJ7620U2 TEST DEMO: Recognize 9 gestures.");

lcd.setCursor(0, 0);
lcd.print(" Gesture ");
lcd.setCursor(0, 1);
lcd.print(" Recognition ");
delay(4000);

uint8_t error = 0;

error = paj7620Init(); // Khởi tạo PAJ7620
if (error)
{
Serial.print("INIT ERROR,CODE:");
Serial.println(error);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("INIT ERROR,CODE:");
lcd.setCursor(0, 1);
lcd.print(error);
delay(3000);
}
else
{
Serial.println("INIT OK");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("INIT OK");
delay(3000);
}
Serial.println("Please input your gestures:\n");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Input You");
lcd.setCursor(0, 1);
lcd.print("Gestures");
delay(3000);
}

void loop()
{
uint8_t data = 0, data1 = 0, error;

error = paj7620ReadReg(0x43, 1, &data); // Địa chỉ thanh ghi của cảm biến PAJ7620
if (!error)
{
switch (data)
{ // Khi các cử chỉ khác nhau được phát hiện biến dữ liệu trên thanh ghi 0x43 sẽ thay đổi
case GES_RIGHT_FLAG:
delay(GES_ENTRY_TIME);
paj7620ReadReg(0x43, 1, &data);
if (data == GES_FORWARD_FLAG)
{
Serial.println("Forward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Forward");
delay(GES_QUIT_TIME);
}
else if (data == GES_BACKWARD_FLAG)
{
Serial.println("Backward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Backward");
delay(GES_QUIT_TIME);
}
else
{
Serial.println("Right");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Right");
}
break;

case GES_LEFT_FLAG:
delay(GES_ENTRY_TIME);
paj7620ReadReg(0x43, 1, &data);
if (data == GES_FORWARD_FLAG)
{
Serial.println("Forward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Forward");
delay(GES_QUIT_TIME);
}
else if (data == GES_BACKWARD_FLAG)
{
Serial.println("Backward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Backward");
delay(GES_QUIT_TIME);
}
else
{
Serial.println("Left");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Left");
}
break;

case GES_UP_FLAG:
delay(GES_ENTRY_TIME);
paj7620ReadReg(0x43, 1, &data);
if (data == GES_FORWARD_FLAG)
{
Serial.println("Forward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Forward");
delay(GES_QUIT_TIME);
}
else if (data == GES_BACKWARD_FLAG)
{
Serial.println("Backward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Backward");
delay(GES_QUIT_TIME);
}
else
{
Serial.println("Up");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Up");
}
break;

case GES_DOWN_FLAG:
delay(GES_ENTRY_TIME);
paj7620ReadReg(0x43, 1, &data);
if (data == GES_FORWARD_FLAG)
{
Serial.println("Forward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Forward");
delay(GES_QUIT_TIME);
}
else if (data == GES_BACKWARD_FLAG)
{
Serial.println("Backward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Backward");
delay(GES_QUIT_TIME);
}
else
{
Serial.println("Down");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Down");
}
break;

case GES_FORWARD_FLAG:
Serial.println("Forward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Forward");
delay(GES_QUIT_TIME);
break;

case GES_BACKWARD_FLAG:
Serial.println("Backward");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Backward");
delay(GES_QUIT_TIME);
break;

case GES_CLOCKWISE_FLAG:
Serial.println("Clockwise");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Clockwise");
break;

case GES_COUNT_CLOCKWISE_FLAG:
Serial.println("anti-clockwise");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Anti-Clockwise");
break;

default:
paj7620ReadReg(0x44, 1, &data1);
if (data1 == GES_WAVE_FLAG)
{
Serial.println("wave");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Wave");
}
break;
}
}
delay(100);
}

Mọi người ơi! Con🤖 AI nó còn nói thế này thì mình nên stop phải không mọi người❓🤣🤣Ad thực sự sợ con AI này đó các bạn ạ!...
06/02/2023

Mọi người ơi! Con🤖 AI nó còn nói thế này thì mình nên stop phải không mọi người❓
🤣🤣
Ad thực sự sợ con AI này đó các bạn ạ!

LỜI NHẮN DÀNH CHO NHỮNG ANH EM THEO DÕI GIÁ TIỀN SỐ💲💲Ngày càng có nhiều người theo dõi tìm hiểu tiền số, vì vậy có rất n...
14/01/2023

LỜI NHẮN DÀNH CHO NHỮNG ANH EM THEO DÕI GIÁ TIỀN SỐ💲💲
Ngày càng có nhiều người theo dõi tìm hiểu tiền số, vì vậy có rất nhiều cách để theo dõi giá lên xuống của tiền số (qua web, app,...) Vậy anh em hay theo dõi biến động giá của tiền số như thế nào ❓ Đối với mình thì mình hay theo dõi qua Binance hoặc Coindesk nhưng hôm nay mình cùng mọi người sẽ tìm hiểu cách để theo dõi biến động giá của tiền số cụ thể là Bitcoin theo một cách khá thú vị với ESP32 và màn hình Oled và mạng Wifi.
⚠️Nếu anh em chưa biết ESP32 thì mình đã có bài về module này rồi nhé, anh em có thể đọc ở đây 👇👇https://www.facebook.com/linhkiendientunongnghiep/posts/pfbid02tM2KNhgYPtwGCC8mJYQh26QimFvR1ikw8nu1aWQ6hPqVov2cstWHL9gq5xZcaFJxl
️🏆🏆Thực ra nếu anh em đã biết về ESP32 thì cái hiển thị này cũng khá đơn giản đó là ESP32 kết nối với Internet rồi lấy giá Bitcoin được cập nhật thông qua API của trang Coindesk mỗi 15 phút/1 lần thông qua câu lênh Send và Get của Html (giống như mọi người xem chart 15 phút vậy đó 👌)
-Mọi người hoàn toàn có thể thay đổi lấy giá của tiền số khác chỉ cần thay đổi API trong code là được không nhất thiết phải là Bitcoin (như Ethereum, Litecoin, Ripple,..)
✅Bonus: anh em có thể xem phần trăm thay đổi so với giá đóng cửa ngày hôm qua và còn có thể hiển thị led xanh lá cây khi tăng, và led đỏ khi giảm (😊rất may là không có màu tím, và màu xanh lơ😊)
✅Đối với màn hình Oled anh em có thể sử dụng màn hình oled 0.56 inch hoặc 0.96 inch hoặc lớn hơn miễn là có kết nối I2C là được, còn ở đây mình sử dụng màn hình 0.96 inch SSD1306 nhé‼️‼️ (chú ý là Oled này sử dụng 3.3V anh em đừng nhầm nhé)
️🏆Sau khi đã hiểu cách hoạt động ta cùng đền với cách đấu dây của mạch xem có gì khó khắn không❓ Ở đây mình sẽ sử dụng loại ESP32 loại 30 chân mọi người lưu ý nhé.
✅+ Chân D22 của ESP32- chân SCK của Oled SSD1306
✅+ Chân D21 của ESP32 - chân SDA của Oled SSD1306
✅+ Chân 3V3 của ESP32 - chân VDD của Oled
✅+ Chân GND của ESP32 - chân VDD của Oled- chung với GND của led
✅+ Chân D19 của ESP32 - chân dương của led đỏ (nhớ thêm điện trở 220 ôm khỏi cháy led)
✅+ Chân D18 của ESP32 - chân dương của led xanh (nhớ thêm điện trở 220 ôm khỏi cháy led)
✅+ Đừng quên cấp nguồn cho ESP32
️🏆Xong xuôi đấu dây giờ đến phần code là khó nhất. Mọi người nhớ thêm đầy đủ thư viện cho code đặt biệt là thư viện SSD1306 sử dụng của Adafruit😉
⚠️Lưu ý: phần logo bitmap của Bitcoin mọi người phải viết đúng như trong ảnh mới hiển thị được nhé🌞)
Mình để code ở dưới anh em cùng tham khảo👇👇
//Thư viện Oled







SCREEN_WIDTH 128 //Biến chiều dài và rộng của Oled
SCREEN_HEIGHT 64
OLED_RESET -1 // Chân reset
SCREEN_ADDRESS 0x3C //Địa chỉ I2C của Oled
upLED 18
downLED 19
Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Tạo đối tượng hiển thị

const char* ssid = "************"; //Tên wifi của nhà bạn
const char* password = "**********"; //Nhập password của nhà bạn

const int httpsPort = 443; //API được Coindesk cung cấp - https://www.coindesk.com/price/bitcoin
const String url = "http://api.coindesk.com/v1/bpi/currentprice/BTC.json";
const String historyURL = "http://api.coindesk.com/v1/bpi/historical/close.json";
const String cryptoCode = "BTC";

WiFiClient client; //Chế độ Wifi Client
HTTPClient http;

String formattedDate; //Tạo biến để lưu trữ ngày giờ
String dayStamp;
String timeStamp;

const unsigned char bitcoinLogo [] PROGMEM = //'Logo bitmap của Bitcoin'kích thước 128x64px, mỗi dòng 15 mã mọi người xem ở ảnh,
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x03, 0xe7, 0xc0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0xe7, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02, 0x24, 0x40, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x02, 0x24, 0x40, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x02, 0x24, 0x40, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x02, 0x24, 0x40, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x02, 0x3c, 0x40, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0xfe, 0x3c, 0x7c, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x01, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1c, 0x03, 0xf0, 0x3f, 0x80, 0x60, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xf0, 0x3f, 0xe0, 0x20, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x18, 0x30, 0x70, 0x30, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x18, 0x30, 0x10, 0x30, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x18, 0x30, 0x10, 0x30, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x18, 0x30, 0x10, 0x30, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x18, 0x30, 0x30, 0x20, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x18, 0x30, 0xe0, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x18, 0x3f, 0xc0, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x18, 0x00, 0x01, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x18, 0x00, 0x00, 0xf0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x18, 0x00, 0x00, 0x38, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x18, 0x3f, 0xe0, 0x18, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x18, 0x30, 0xf8, 0x0c, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x18, 0x30, 0x1c, 0x0c, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x18, 0x30, 0x0c, 0x0c, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x18, 0x30, 0x04, 0x0c, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x18, 0x30, 0x0c, 0x0c, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x18, 0x30, 0x0c, 0x0c, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x18, 0x30, 0x38, 0x0c, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x01, 0xf0, 0x3f, 0xf0, 0x08, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1c, 0x01, 0xe0, 0x1f, 0x00, 0x18, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x30, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x00, 0x00, 0x0f, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x07, 0x03, 0xfe, 0x3c, 0x7e, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x02, 0x3c, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x02, 0x24, 0x40, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x02, 0x24, 0x40, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x02, 0x24, 0x40, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02, 0x24, 0x40, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0xe7, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x03, 0xe7, 0xc0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc0, 0x3f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

void setup()
{
Serial.begin(115200); //Khởi động màn hình serial
pinMode(upLED, OUTPUT); //Cài đặt chân led là đầu ra
pinMode(downLED, OUTPUT);

if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) //Kết nối tới OLed
{
Serial.println(F("SSD1306 allocation failed"));
for (;;); // Don't proceed, loop forever
}

display.clearDisplay(); //Xóa màn hình
display.setTextColor(SSD1306_WHITE); //Đặt màu chữ thành màu trắng
display.drawBitmap(0, 0, bitcoinLogo, 128, 64, WHITE); //Hiển thị hình bitmap Logo bitcoin
display.display();
delay(2000);

display.clearDisplay(); //Xóa màn hình
display.setTextSize(1); //Đặt kích thước của chữ
display.setTextColor(WHITE);
display.println("Connecting to WiFi...");
display.display();

WiFi.begin(ssid, password);

Serial.print("Connecting to WiFi...");
while (WiFi.status() != WL_CONNECTED) //Kết nối tời mạng Internet từ Wifi
{
delay(500);
Serial.print(".");
}
Serial.println();

display.println("Connected to: "); //Hiển thị thông báo kết nối thành công
display.print(ssid);
display.display();
delay(1500);
display.clearDisplay();
display.display();
}

void loop()
{
Serial.print("Connecting to "); //Kết nối tới url của màn hình
Serial.println(url);

http.begin(url);
int httpCode = http.GET(); //Lấy giá bitcoin từ API
StaticJsonDocument doc;
DeserializationError error = deserializeJson(doc, http.getString());

if (error) //Hiển thị thông báo lỗi nếu kết nối không thành công
{
Serial.print(F("Connect Json Failed"));
Serial.println(error.f_str());
delay(2500);
return;
}

Serial.print("HTTP Status Code: ");
Serial.println(httpCode);

String BTCUSDPrice = doc["bpi"]["USD"]["rate_float"].as(); //Lưu trữ giá bitcoin và ngày cập nhật trong các biến
String lastUpdated = doc["time"]["updated"].as();
http.end();

Serial.print("Getting history...");
StaticJsonDocument historyDoc;
http.begin(historyURL); // Lấy lịch sử giá Bitcoin từ API
int historyHttpCode = http.GET();
DeserializationError historyError = deserializeJson(historyDoc, http.getString());

if (historyError) { //Hiển thị thông báo lỗi nếu không lấy được lịch sử của giá bitcoin
Serial.print(F("ConnectJson(History) failed"));
Serial.println(historyError.f_str());
delay(2500);
return;
}

Serial.print("History HTTP Status Code: ");
Serial.println(historyHttpCode);
JsonObject bpi = historyDoc["bpi"].as();
double yesterdayPrice;
for (JsonPair kv : bpi) {
yesterdayPrice = kv.value().as(); //Lưu trữ giá đóng của bitcoin ngày hôm trước
}

Serial.print("BTCUSD Price: "); //Hiển thị giá bitcoin hiện tại trên màn hình serial
Serial.println(BTCUSDPrice.toDouble());

Serial.print("Yesterday's Price: "); //Hiển thị giá đóng cửa Bitcoin ngày hôm trước trên màn hình serial
Serial.println(yesterdayPrice);

bool isUp = BTCUSDPrice.toDouble() > yesterdayPrice; //Kiểm tra sự tăng giảm giá
double percentChange;
String dayChangeString = "24hr Change:";
if (isUp) //Nếu giá hiện tại tăng so với giá đóng cửa hôm trước
{
percentChange = ((BTCUSDPrice.toDouble() - yesterdayPrice) / yesterdayPrice) * 100; // Tính ra % tăng giá
digitalWrite(upLED, HIGH);
digitalWrite(downLED, LOW);
}
else //Nếu giá giảm so với ngày hôm trước
{
percentChange = ((yesterdayPrice - BTCUSDPrice.toDouble()) / yesterdayPrice) * 100; // Tính ra % giảm giá
dayChangeString = dayChangeString + "-";
digitalWrite(downLED, HIGH);
digitalWrite(upLED, LOW);
}

Serial.print("Percent Change: "); //Hiển thị % thay đổi trên màn hình Serial
Serial.println(percentChange);

display.clearDisplay(); //Xóa màn hình Oled
display.setTextSize(1);
printCenter("BTC/USD", 0, 0); //Hiển thị so sánh với đồng đôla trên Oled

display.setTextSize(2);
printCenter("$" + BTCUSDPrice, 0, 20); //Hiển thị giá Bit hiện tại lên Oled

display.setTextSize(1); //Hiển thị phần trăm thay đổi lên Oled
dayChangeString = dayChangeString + percentChange + "%";
printCenter(dayChangeString, 0, 55);
display.display(); //Tiếp tục cập nhật màn hình liên tục

http.end(); //Kết thúc kết nối với API để đảm bảo giá Bit không bị thay đổi liên tục
esp_sleep_enable_timer_wakeup(900000000); //Đưa vào chế độ ngủ 15 phút sau tiếp tục kết nối với API
}

void printCenter(const String buf, int x, int y) //Căn giá hiện tại của Bit vào giữa màn hình
{
int16_t x1, y1;
uint16_t w, h;
display.getTextBounds(buf, x, y, &x1, &y1, &w, &h); //Tính chiều dài chuỗi của giá Bit
display.setCursor((x - w / 2) + (128 / 2), y); //Đặt con trỏ màn hình ở giữa để bắt đầu viết giá
display.print(buf); //In chuỗi giá Bit
}
️🏆Cảm ơn mọi người đã theo dõi, anh em nếu yêu thích thì bấm ilke nhé👌

ANH EM AI ĐÃ BIẾT VỀ CHAT GPT CỦA OPEN AI THÌ CHẮC CŨNG BIẾT NÓ TỐT ĐẾN ĐÁNG SỢ LUÔN RỒI😱⭐Dạo này truyền thông có rất nh...
11/01/2023

ANH EM AI ĐÃ BIẾT VỀ CHAT GPT CỦA OPEN AI THÌ CHẮC CŨNG BIẾT NÓ TỐT ĐẾN ĐÁNG SỢ LUÔN RỒI😱
⭐Dạo này truyền thông có rất nhiều bài về Chat GPT thì anh em đã nghe rồi tìm hiểu mới biết nó đáng sợ đến mức nào bởi vì bây giờ nó có thể áp dụng trong quá nhiều lĩnh vực ngoài code và tìm kiếm.
⭐Không phải tự dưng mà Google lo lắng bị thay thế đến vậy (đấy là việc của Google anh em muốn biết có thể tìm hiểu thông tin nhé)
⭐Còn theo ý kiến cá nhân của mình thì sau này mấy ông viết content, soạn thảo hợp đồng làng nhàng chắc ra đảo hết (very fun thôi anh em nhé, nói chung là Chat GPT vẫn được tạo ra từ con người mà🤣)
⭐Việt Nam, Trung Quốc, Nga nằm trong các quốc gia không được hỗ trợ nói chuyện với Chat GPT bởi Open AI vì vậy để có cách đăng kí tài khoản thì có rất nhiều hướng dẫn về cách fake IP nhưng mình không có điều kiện để thực hiện vì vậy mình xin chia sẻ cách cài Chat GPT vào Google Chorme Extension bởi Merlin đã mang được phần nào Chat GPT để anh em có thể trải nghiệm con AI này đáng sợ đến mức nào.
Anh em có thể xem link ở dưới nhé👇👇 còn cài đặt Extension thì quá quen thuộc với anh em rồi phải không❓
https://chrome.google.com/webstore/detail/merlin-openai-chatgpt-pow/camppjleccjaphfdbohjdohecfnoikec/related
⭐Trước khi trải nghiệm Chat GPT cần biết nó có gì mà đáng sợ vậy
Chat GPT là chatbot AI được phát triển bới Open AI chuyên về đối thoại. Nó sử dụng mô hình ngôn ngữ GPT-3 để tạo các cuộc hội thoại nghe có vẻ tự nhiên và tạo nội dung hấp dẫn, chính xác về các chủ đề thời gian thực. ChatGPT có thể thông thạo rất nhiều chủ đề khác nhau thông qua quá trình tổng hợp thông tin và hoàn toàn có thể tiến tới cá nhân hóa.
Tất nhiên là Open AI không phải là nơi làm chatbot đầu tiên mà trước đó có rất nhiều ông lớn đã làm nhưng đều thất bại vì chatbot toàn đưa ra thông tin sai lệch hoàn toàn vì vậy Open AI đã đưa ra hệ thống kiểm duyệt để thông tin được kiểm duyệt tốt hơn.
⭐Giờ sang phần trải nghiệm qua google chorme nhé ❗
Đầu tiên chúng ta vào tìm kiếm rồi thông qua tìm kiếm ta bấm Ctrl+M cửa sổ mới hiện ra và chúng ta hoàn toàn có thể giao tiếp bằng tiếng Việt còn nếu không được thì chuyển bằng tiếng Anh sẽ cho ra kết quả chính xác hơn.
✅Đầu tiên phải nói về tìm code anh em em có thể tìm code Arduino cho bất kì cảm biến nào đều cho ra kết quả nhé (viết bằng C, Python đều được nhé )
✅Sau đó vào mail trên google chorme tiếp tục hỏi làm sao để trả lời mail này chuyên nghiệp là nó cũng trả lời được ngay nhé
✅Chưa hết chúng ta có thể vào Google Trang tính nó hoàn toàn có thể gợi ý code trong từng ô một trong trang tính nhé anh em, quá tuyệt vời phải không❓
✅Hoặc anh em có thể hỏi làm sao để tán đổ một cô gái AI cũng hoàn toàn trả lời một cách rất tự nhiên nhé
✅Còn rất nhiều điều nữa anh em có thể hỏi AI, anh em có thể tự cài và tự hỏi nó nhé
⚠️⚠️Lưu ý với anh em là tuy những thông tin do AI cung cấp chưa được cá nhân, tổ chức nào công nhận vì vậy những thông tin này nếu không chính xác thì chỉ mang tính tham khảo đối với tất cả mọi người.
✅Cảm ơn tất cả mọi người đã đọc và quan tâm

10/01/2023

Anh em nhìn thì toàn những linh kiện đơn giản đối với xe cân bằng nhưng viết code thì toàn phải khổ sở với nó thôi anh em ạ.💪
Không nói đến những anh pro nhé✋✋

TIÊP TỤC NÓI VỀ ĐỘ TIỆN LỢI CỦA ARDUINO IOT CLOUDThấy anh em có nói về độ tiện lợi của Arduino IOT Cloud rất nhiều vậy t...
29/12/2022

TIÊP TỤC NÓI VỀ ĐỘ TIỆN LỢI CỦA ARDUINO IOT CLOUD
Thấy anh em có nói về độ tiện lợi của Arduino IOT Cloud rất nhiều vậy thì hôm nay mình sẽ cùng tìm hiểu thêm về nó xem nó có thể hiện tới mức nào anh em nhé.
📍Bài này mình sẽ chia sẻ về cách kết nối với cảm biến DHT11 và làm giao diện đơn giản cho nhiệt độ và độ ẩm . Vì nó cũng là con đẻ của Arduino nên khả năng kết hợp với DHT11 cũng khá dễ dàng và cực kì tiện lợi với code được lưu sẵn trên cloud của Arduino cho nên chúng ta có thể sử dụng mọi máy tính để chỉnh sửa với code, phần mềm Arduino (quá thích hợp với những anh em hay phải di chuyển 👍)
Còn những anh em nào chưa quen với cảm biến DHT11 thì có thể xem lại ở link này mình có nói về cách kết nối rồi nhé 👇👇
https://www.facebook.com/linhkiendientunongnghiep/posts/pfbid02szbFnPqNUhiCtuvKKx8yo8uwgudjbULD1NDCS2fVjPsRqES1j2moQbAYKNvcvQv5l
📍Sau khi đã hiểu về Arduino IOT Cloud, ESP8266, DHT11 thì cùng xem nó kết hợp như thế nào nhé ❓
- Mình đã có bài giới thiệu về cách kết nối Arduino IOT Cloud với ESP8266 anh em nào chưa biết thì có thể xem lại ở link này nhé 👇👇👇https://www.facebook.com/linhkiendientunongnghiep/posts/pfbid027WHK5nWkhDJhhNPgfAoknuZ4zUj9UCXqH1K8Fx4Fbpc23AzjVNUU838TSfLiPenol
- Giờ thì mình chỉ cần kết nối thêm DHT11 vào với ESP8266 và lấy dữ liệu lên Arduino IOT Cloud nữa là được (phần này thật sự không có nhiều điều để nói🤗 đối với những người đã biết về ESP8266 và DHT11 )
📍Thế thì anh em đấu dây vào thôi nào
✅Chân 5V của ESP8226 - chân VCC của DHT11
✅Chân GND của ESP8266 - chân GND của DHT11
✅Chân D4 của ESP8266 - chân Data của DHT11
📍Giờ sang phần thao tác trên Arduino IOT Cloud nó cũng chả khác mấy trên Arduino IDE đâu👌
✅Phần kết nối và thêm thiết bị đối với Arduino IOT Cloud ở bài trước mình đã nối kĩ rồi mình không nói lại nữa nhé
✅Giờ thì ta tạo Thing mới và đặt tên cho nó sau đó vào tab Setup chọn Add Variables (thêm biến) ở đây chúng ta sẽ cần 3 biến : Temperature (Nhiệt độ) Humidity (độ ẩm) và biến String (hiển thị)
⚠️Lưu ý: Đối với biến Temprerature và Humidity và String anh em tất nhiên anh em phải để đặc tính biến là Read & Write và On Change rồi còn phần Select Variables Type anh em nhớ chọn Temperature sensor (nếu độ C thì chọn độ C nhé) và Relative humidity và Character String để phần mềm nhận biết biến dễ dàng hơn.
- Khi anh em chọn Select Variables Type lần đầu thì sẽ gặp đôi chút khó khăn (cái gì lần đầu chẳng khó khăn) nó sẽ hiện No results found và chúng ta phải bấm vào Search in all categories để nó hiện ra Temperature sensor, Relative humidity và Character String cho chúng ta chọn.
✅Sau đó anh em để ý phần Associated Device xem IOT Cloud đã nhận ra thiết bị chưa nếu chưa anh em nhớ cài driver và kết nối lại nhé
✅Giờ đến phần thiết kế giao diện anh em bấm vào Tab Dashboards
- Đầu tiên chúng ta phải thêm 2 giao diện đồng hồ Gause (anh em xem ảnh) cho 2 biến và nhớ phải link 2 biến nhiệt độ (Temprerature) và độ ẩm (Humidity) ở phần Link variables nhé không là nó chẳng hiển thị cái gì cả
- Còn biến Msg thì anh em phải thêm giao diện Messenger (anh em xem ảnh) sau đó link biến msg vào giao diện để xem thông tin gửi lên IOT Cloud nhé (cái này giống hệt cửa sổ Serial trong Arduino IDE không có gì khác cả)
- Chưa hết anh em ơi, nếu chúng ta chỉ xem thông tin thì không tận dụng hết được hết chức năng của IOT Cloud vì vậy chúng ta cần thêm giao diện biểu đồ Chart (ở ảnh) để có thể theo dõi nhiệt độ và độ ẩm theo thời gian thực quá tiện đúng không mọi người, sau khi thêm giao diện thì lại tiếp tục link biến Temprerature và Humidity vào trong 2 Chart nhé
📍Sau khi thiết kế xong giao diện chúng ta cùng nhìn lại xem nó đã đẹp chưa 🤗nói vậy thôi chứ nếu mà không có code ở tab Sketch trong phần Things thì giống như một cô gái đẹp nhưng mà không có hồn vậy đó mọi người, chúng ta cùng xem viết code như thế nào nhé❓
⚠️Lưu ý: chúng ta sẽ chưa thấy phần thêm thư viện ở đâu vì vậy chúng ta cần phải đi tìm, đó là khi chúng ta bấm vào Open full editor nó sẽ hiện ra giao diện Editor rất chuyên nghiệp giống với Arduino IDE (cái này ai không biết sẽ kêu mình rất pro🙏). Đùa vậy thôi thực ra đối với các dòng cảm biến DHT thì thư viện nó đã nhận sẵn trên IOT Cloud rồi chúng ta chỉ cần thêm dòng "DHT.h" vào là xong mọi thứ đã có IOT Cloud lo rồi (lại thêm một thứ quá tiện lợi so với Arduino IDE đúng không anh em👍)
- Còn đối với những anh em muốn tìm hiểu thêm về thư viện thì chúng ta bấm vào tab Libraries nếu là lần đầu tiên tìm thư viện nào đó thì mọi người phải bấm vào Library Manager (ở đây cũng có thể tìm được bản thư viện mới nhất của DHT là DHT_u và còn có thể tải về máy tính nữa nhé👍) ở đó mới tìm được chứ anh em tìm ở phần Search Libraries sẽ không tìm thấy ngay đâu (đúng là lần đầu cái gì cũng khó🤕)
📍Giờ khi đã xử lí xong phần thư viện thì chúng ta đến phần viết code xem như thế nào nhé.
⚠️Lưu ý về độ bảo mật cho anh em nữa là anh em phải chuyển sang tab Secret và phải điền đúng SSID, Password, Device Key (những thứ này mọi người đã tạo ở Configure Network rồi anh em không nhớ có thể xem lại ảnh đó là lý do vì sao mình phải dặn các bạn copy vào đâu đó chứ mất là khỏi dùng IOT Cloud luôn đó🙌) nếu không điền đúng thì nó sẽ không cho anh em upload code vào thiết bị đâu (cái lưu ý quan trọng chứ anh em đừng bảo mình sao ông này lắm lưu ý thế🙃)
📍Mọi thứ xong xuôi mình để code ở dưới mọi người tham khảo nhé👇👇👇
Then we will click on the sketch to write the code we will add few lines to the code.
/*
Sketch generated by the Arduino IoT Cloud Thing "Temperature and humidity monitoring"
https://create.arduino.cc/cloud/things/4202742a-b802-4d86-8f85-2a73394c0797
Arduino IoT Cloud Variables description
The following variables are automatically generated and updated when changes are made to the Thing

CloudRelativeHumidity humidity;
String msg;
CloudTemperatureSensor temperature;

Variables which are marked as READ/WRITE in the Cloud Thing will also have functions which are called when their values are changed from the Dashboard.
These functions are generated with the Thing and added at the end of this sketch.
*/

"thingProperties.h"
"DHT.h"
DHTpin 2 // D4 on the nodemcu ESP8266
DHTTYPE DHT11
DHT dht(DHTpin,DHTTYPE);

void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);

// Defined in thingProperties.h
initProperties();

// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);

/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}

void loop() {
ArduinoCloud.update();
// Your code here
dht_sensor_getdata();
}

void onHumidityChange() {
// Do something

}

void onMsgChange() {
// Do something
}
void dht_sensor_getdata()
{
float hm= dht.readHumidity();
Serial.print("Humidity ");
Serial.println(hm);
float temp=dht.readTemperature();
Serial.print("Temperature ");
Serial.println(temp);
humidity=hm;
temperature=temp;
msg="Temperature = " + String (temperature)+" Humidity = " + String(humidity);
}
Bài này khá dài rồi xin dừng ở đây, anh em nào muốn mua linh kiện Arduino thì ủng hộ shop ở dưới nhé👇
👉Link shopee: https://shope.ee/99ohZAizYs
👉Link Lazada: https://www.lazada.vn/shop/nbn-electronic-shop-/
👉Link tiktok: https://www.tiktok.com/.com

Address

Hanoi
10000

Alerts

Be the first to know and let us send you an email when Linh Kiện Điện Tử Nông Nghiệp posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Contact The Business

Send a message to Linh Kiện Điện Tử Nông Nghiệp:

Share