Điều khiển mạch Arduino thông qua Wifi sử dụng mạch XBee.

Giới thiệu, nội dung chính

Để giao tiếp giữa máy tính với board Arduino ta thường làm theo cách giao tiếp qua cổng USB kết nối giữa máy tính và board Arduino. Hôm nay, tôi xin giới thiệu đến các bạn yêu thích khám phá cách điều khiển Arduino thông qua module wifi XBee. Với cách thức lập trình và kết nối đơn giản sẽ giúp những bạn mới tìm hiểu có thể tiếp cận và hiểu dễ dàng. Trong bài viết này tôi sử dụng C# để lập trình cho giao diện trên máy tính.

Qua bài viết này, tôi hy vọng sẽ giúp các bạn có thể hiểu và nắm được cách giao tiếp với mạch Xbee một cách cơ bản nhất. Nào ta cùng tìm hiểu thôi!

Phần cứng

  1. Arduino board ( Arduino Due, các bạn có thể dùng UNO nhưng nhớ chú ý Serial và Serial1 trong file lập trình cho Arduino)
  2. Mạch Wifi Xbee (XBee S68)
  3. Mạch set up Xbee 
  4. Dây cắm kết nối giữa Xbee và Arduino.
  5. Mạng Wifi

Thiết đặt thông số cho mạch Xbee

Để thiết lập thông số mang wifi cho mạch Xbee các bạn phải có mạch set up Xbee và phần mềm XCTU để dò mạng và thiết lập địa chỉ IP address. Ngoài ra cũng cần phần mềm Hercules để kiểm tra kết nối giữa máy tính và mạch Xbee xem được hay chưa, driver để nhận cổng USB. Tất cả phần mềm và Code lập trình mình đã add vào link ở dưới cuối bài, các bạn có thể download về và sử dụng. Mình sẽ tóm tắt các bước thiết lập thông số cho mạch Xbee như dưới đây:

  • Cài đặt driver vào máy tính
  • Cài đặt chương trình XCTU.
  • Lắp cổng USB của mạch setup Xbee vào máy tính
  • Mở chương trình XCTU lên
  • Bấm add thiết bị (biểu tượng góc trái màn hình)
  • Sau đó vào interace của của mạch Xbee bằng cách nhấn trực tiếp vào phần thông số hiện ra sau khi add
  • Bấm Active Scan để dò mạng
  • Chọn mạng wifi mà bạn có và nhập password (nếu có)
  • Chuyển IP protocol từ UDP (mặc định sang TCP)
  • Chú ý dòng DL Destination IP address : đây là dòng IP của máy tính, muốn biết IP máy tính vào run --> CMD --> ipconfig --> ip address.
  • Dòng MY Module IP address là của mạch Xbee.
  • Thông số CO Source port các bạn phải đổi ra số Decimal vì đây là số HEX (2616 --> 9750) đề làm port giao tiếp trên máy tính. Chú ý không đổi số 2616 trong phần mềm XCTU, chỉ dùng số 9750 cho lập trình trên máy tính hoặc test với phần mềm Hercules.
  • Sau khi thiết lập dòng nào xong thì nhấn Write ( biểu tượng hình cây viết) để lưu những thay đổi.

Kiểm tra kết nối giữa máy tính và mạch Xbee

Để kiểm tra kết nối giữa máy tinh và mạch Xbee ta sử dụng phần mềm Hercules.

Chú ý mục Module Ip chính là IP của mạch Xbee wifi, port là từ số 2616 ở thông số CO source port quy đổi ra số Decimal ta được 9750.

Kết nối  phần cứng Arduino và Xbee

Phần này ta chú ý đến 4 chân của Xbee :

  • Chân 1 Xbee --> VCC 3V3 Arduino
  • Chân 2 Xbee --> RX1 (19) Arduino
  • Chân 3 Xbee --> TX1 (18) Arduino
  • Chân 10 Xbee --> GND Arduino

Lập trình giao diện máy tính 

Trong phần lập trình giao diện trên máy tính, tôi sử dụng C# để lập trình:

Code lập trình

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Windows.Forms;

namespace GiaotiepwifiXbee
{
    public partial class Form1 : Form
    {
        TcpClient XbeeIP;
        NetworkStream Xbeestream;

        public Form1()
        {
            InitializeComponent();
        }

        private void connect_btn_Click(object sender, EventArgs e)
        {
            status.Text = "Dang ket noi...";
            Refresh();
            try
            {
                Int32 giatriport = Convert.ToInt32(portbox.Text);
                XbeeIP = new TcpClient(ipbox.Text, giatriport);
                Xbeestream = XbeeIP.GetStream();
                status.Text = "Da ket noi!";
            }
            catch
            {
                status.Text = "Khong ket noi duoc!";
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Xbeestream.WriteByte(49);

            button1.Enabled = false;
            button2.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Xbeestream.WriteByte(48);

            button1.Enabled = true;
            button2.Enabled = false;
        }

    }
}

Lưu ý : Ở dòng Xbeestream.WriteByte() , số trong ngoặc là số ASCII (48 --> 0, 49 -->1). Mục đích khí nhấn nút on trên giao diện sẽ gửi về cổng Serial1 giá trị là 1 và off là 0.

Lập trình trên board Arduino

Trong đoạn code lập trình cho Arduino, mục đích tôi là ngõ ra I/O on và off. Tôi đã sử dụng chân số 13 tương ứng với Led để cho tiện việc thiết lập phần cứng.

Code lập trình

int led = 13;
byte data;
void setup()
{
  // Thiet lap toc do baud cho cong TX1 và RX1
  Serial1.begin(9600);
  
  pinMode(led, OUTPUT);   // digital sensor is on digital pin 13
}

void loop()
{
  if (Serial1.available())
  { 
    
       data = Serial1.read();// doc gia tri tu cong serial1(tuong ung voi TX1 va RX1)
       switch (data) 
    {
      case '1' : digitalWrite (led,HIGH);break; 
      case '0': digitalWrite (led,LOW);break; 
    }
  
 }
}

Lời kết

Đến đây là bạn đã hoàn thành việc giao tiếp của mình rồi, bạn sẽ thấy khí nhấn nút ON hoặc OFF trên màn hình thì đèn Led 13 mở hoặc tắt tương ứng. Chúc các bạn thành công và tìm được nhiều niềm vui hơn nữa trong việc lập trình nhé.

Link toàn bộ phần mềm và code lập trình để các bạn tham khảo

http://www.mediafire.com/download/2rr1rlfgtaca36a/giaotiepwifi.rar​

lên
13 thành viên đã đánh giá bài viết này hữu ích.
Hướng dẫn sử dụng các loại module

Nếu bạn đang muốn thực hiện hóa ý tưởng của mình mà không biết dùng loại module nào? Hãy tham khảo các module trong danh sách sau

Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results