首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

基於 MSP430G2553 + TP-Link 703N 的 WiFi 視頻小車完整實戰

     編輯:關於C語言

專案概覽

本專案實現一款低功耗、WiFi 遠程控制、實時視頻回傳的智能小車。核心控制器採用 TI MSP430G2553(LaunchPad G2),通訊模組採用刷入 OpenWrt 的 TP-Link TL-WR703N 路由器,整合攝像頭驅動與 ser2net 服務,實現視頻流與控制指令雙通道傳輸。適用於消防偵察、有毒環境探測等危險場景。

系統整體架構圖

一、硬體架構設計

1.1 主控模組:MSP430G2553 LaunchPad

  • 16-bit RISC,1 MHz DCO,超低功耗(LPM1 僅 0.5 μA)。
  • 小車大部分時間處於待機等待指令,利用 LPM1 睡眠模式大幅延長電池壽命。
  • 體積小、重量輕,適合搭載於小車底盤。
MSP430G2553 LaunchPad

1.2 WiFi 通訊模組:TP-Link TL-WR703N (OpenWrt)

  • 刷入 OpenWrt 後安裝 mjpg-streamer(攝像頭驅動)與 ser2net(串口轉 TCP)。
  • 自帶 USB 口直連攝像頭,體積極小(約 5×5×2 cm),供電 5V/1A。
  • 視頻流經 HTTP MJPEG 回傳;控制指令經 TCP 9999 端口透傳至 MSP430 UART。
TL-WR703N 改裝模組

1.3 電機驅動模組:L298N 雙 H 橋

參數數值
驅動電壓 (Vs)5V ~ 35V
峰值電流2A / 橋
邏輯電壓 (Vss)4.5V ~ 5.5V
最大功耗20W

採用三輪差速驅動:兩側 DC 減速電機 + 1 萬向輪,靈活轉向。

L298N 原理圖 L298N 接線圖

1.4 電源管理系統

  • 2 節 18650 鋰電池串聯(7.4V/2700mAh)。
  • LM317 降壓至 5V 供路由器、L298N 邏輯端。
  • 兩顆 1N4007 二極管串聯再降至 3.6V 供 MSP430。
LM317 降壓電路

1.5 車體結構

  • 透明亞克力底盤,三輪佈局,重心低、穩定性好。
小車實物圖

二、通訊協議設計

採用4 字節定長包,格式:包頭(0xFF) + 類型碼 + 數據碼 + 包尾(0xFF)

類型碼數據碼功能
0x000x01前進
0x000x02後退
0x000x03左轉
0x000x04右轉
0x000x00停止
0x010x00LED1 亮
0x010x01LED1 滅

範例:前進指令 = FF 00 01 FF。MSP430 串口中斷逐字節接收,收到包尾 0xFF 後解析執行。

三、軟體實現

3.1 下位機(MSP430G2553)關鍵代碼片段

// UART 初始化 9600-8-N-1,SMCLK 1MHz
UCA0CTL1 |= UCSSEL_2; UCA0BR0 = 0x68; UCA0BR1 = 0x00; UCA0MCTL = UCBRS0;
IE2 |= UCA0RXIE; __enable_interrupt();

// 低功耗主循環
while(1) LPM1; // 進入 LPM1 睡眠,等待 RX 中斷喚醒

// RX 中斷服務程序
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void) {
    LPM1_EXIT; // 喚醒 CPU
    // ... 接收 4 字節組包、校驗、分發至 RunCommand()
    RunCommand();
}

3.2 電機控制函數

void Moto_Forward()  { P2OUT = 0x0A; }       // IN1=1,IN2=0,IN3=1,IN4=0
void Moto_Backward() { P2OUT = 0x05; }       // IN1=0,IN2=1,IN3=0,IN4=1
void Moto_TurnLeft() { P2OUT = 0x02; }       // 左輪停、右輪轉
void Moto_TurnRight(){ P2OUT = 0x08; }       // 右輪停、左輪轉
void Moto_Stop()     { P2OUT &= 0x00; }

3.3 上位機:PC 端 (C#) 與 Android 端

  • PC 端:支援鍵盤/搖桿控制、視頻顯示、指令自定義,便於調試。
  • Android 端:虛擬搖桿、重力感應控制、按下發送動作指令、鬆開自動發送停止指令。
PC 控制端介面 Android 控制端介面

四、系統創新亮點

  • ✅ WiFi 替代藍牙:傳輸距離 > 100m,帶寬支撐 30fps 視頻。
  • ✅ OpenWrt 可定制:精簡固件,僅保留攝像頭與 ser2net,啟動快、穩定。
  • ✅ MSP430 極致低功耗:待機電流 < 1μA,電池續航 > 8 小時。
  • ✅ 協議可擴展:預留類型碼 0x02~0xFF 供未來傳感器、機械臂擴展。
  • ✅ 重力感應交互:手機傾斜即控制轉向,體驗直觀。

五、演示視頻

六、附錄:完整 MSP430 代碼

#include "msp430g2553.h"
#define uchar unsigned char
#define uint unsigned int

uchar Tempdatatable[4], CommandData[4];
int URTAReceivedCount=0, n=1;

void Delay_1ms(uint i) { ... }

void Moto_Forward()  { P2OUT = 0x0A; }
void Moto_Backward() { P2OUT = 0x05; }
void Moto_TurnLeft() { P2OUT = 0x02; }
void Moto_TurnRight(){ P2OUT = 0x08; }
void Moto_Stop()     { P2OUT &= 0x00; }

void RunCommand(void) {
    if(CommandData[0]==0xFF && CommandData[3]==0xFF) {
        switch(CommandData[1]) {
            case 0x00: switch(CommandData[2]) {
                case 0x00: Moto_Stop(); break;
                case 0x01: Moto_Forward(); break;
                case 0x02: Moto_Backward(); break;
                case 0x03: Moto_TurnLeft(); break;
                case 0x04: Moto_TurnRight(); break;
            } break;
            case 0x01: switch(CommandData[2]) {
                case 0x00: P1OUT |= BIT0; break;  // LED1 ON
                case 0x01: P1OUT &= ~BIT0; break; // LED1 OFF
            } break;
        }
    }
}

void main(void) {
    WDTCTL = WDTPW + WDTHOLD;
    P1SEL = P1SEL2 = BIT1 + BIT2; // UART
    P1DIR |= BIT0; P1OUT &= ~BIT0; // LED
    P2DIR = 0xFF; P2OUT = 0x00;    // Motor
    UCA0CTL1 |= UCSSEL_2; UCA0BR0 = 0x68; UCA0BR1 = 0x00; UCA0MCTL = UCBRS0;
    UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE; __enable_interrupt();
    while(1) LPM1;
}

#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void) {
    LPM1_EXIT; IE2 &= ~UCA0RXIE;
    uchar temp = UCA0RXBUF;
    // ... 組包邏輯同原文 ...
    RunCommand();
    IE2 |= UCA0RXIE;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved