1. 程式人生 > >樹莓派3B在Qt下使用串列埠傳送資料

樹莓派3B在Qt下使用串列埠傳送資料

一、解除串口占用

使用putty的時候神奇的發現樹莓派竟然是支援serial進行操作。試了試,和在ssh下使用沒有多少區別,速度也很快。
樹莓派的串列埠主要也就是被這個佔用了,配置釋放之後才能使用它來進行串列埠通訊。

在命令列裡輸入如下指令:

sudo raspi-config

在如下出現的介面中選擇 5
這裡寫圖片描述
選擇“P6 Serial”,然後把它關閉了,即Disable。
這裡寫圖片描述

開啟/boot/config.txt檔案,找到如下配置語句使能串列埠,如果沒有,可新增在檔案最後。

enable_uart=1 

修改完成後可能無法直接使用,最好重啟下樹莓派。

二、建立Qt工程

開啟Qt Creator,選擇新建一個“非Qt專案”,然後選擇“純C++語言專案”,大致指示如下
這裡寫圖片描述
這裡我的工程名字是“wiringPi”,選擇好儲存工程的路徑,接下來一路下一步。

wiring.pro裡的程式碼:

TEMPLATE=app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

# 下面這個LIBS很關鍵
LIBS += -lwiringPi

main.cpp裡的程式碼:

#include <string.h>
#include <stdlib.h>
#include <stdio.h> #include <wiringPi.h> #include <wiringSerial.h> #include <iostream> #include<sys/stat.h> #include<unistd.h> using namespace std; int main(void) { int fd; char str[6],str1[6]; if(wiringPiSetupSys()<0)return 1; //初始化wiringPi sprintf
(str,"%s%s%s\n","X","110","R"); sprintf(str1,"%s%s%s\n","Y","220","R");//字串拼接,%s可替換成int/float變數 while(1) { delay(10); /*開啟串列埠裝置ttyS0,波特率9600*/ if((fd=serialOpen("/dev/ttyS0",9600))<0) { int time = millis();//計時函式,從wiringPi初始化開始至今 printf("serial doesn't open,return -1,time is %d",time); return 1; } serialPrintf(fd,str); //向串列埠裝置傳送資料,整個str字串 serialPrintf(fd,str1); serialClose(fd);//傳送完之後關閉串列埠,不然會出現程式執行一段時間後串列埠自動關閉的情況(serialOpen()返回-1)。 int c = waitKey(10); if ((char)c == 27) { break; } // escape } serialClose(fd); return 0; }

三、測試結果

這裡有個小問題,使用wiringPi發著資料,程式執行一段時候串列埠自動關閉,程式直接返回結束。可能和wiringPi內部機制有關係吧。——最後發現只要不去動那個彈出來Terminal介面,串列埠就不會中斷,真是神奇。
這裡寫圖片描述