1. 程式人生 > >逗比學樹莓派之lcd1602顯示

逗比學樹莓派之lcd1602顯示

通過樹莓派GPIO連線LCD1602,使用wiringPi庫和其附帶的LCD庫進行顯示樹莓派的CPU溫度和記憶體使用情況。

1.首先按下圖連線好硬體電路圖:


2.然後在終端使用命令 sudo apt-get install git 安裝版本管理軟體Git 。


3.繼續在終端上使用命令 git clone https://github.com/qtsharp/pi-screen  將此小專案的倉庫克隆下來

根據pi-screen/README.md的描述,我們需要先將庫wiringPi  編譯好後,才能編譯此專案中的1602.c。因為1602.c使用了wiringPi 庫檔案提供的樹莓派1602 操控函式。

4. 分別在終端使用命令 git clone git://git.drogon.net/wiringPi


        cd wiringPi

克隆好wiringPi 的git 倉庫後,我們需要的不是直接 “ ./build ”。因為此庫經過不斷改進,已經到了v2 版本,而pi-screen 的作者一直沒有更新。所以需要使用命令  :  git reset --hard 98bcb20d9391ebde24f9eb1244f0d238fb1a1dab " 回到2月7日這個版本就可以了。

然後使用 " sudo ./build" 編譯這個庫就可以了。

6. 至此, wiringPi 庫編譯完後,我們就“ cd ../pi-screen ”回到pi-screen 目錄:

使用 “ gcc 1602.c -o 1602 -L lib -l wiringPi  ” 編譯好這個列印檔案即可。

7. 然後使用 "sudo ./1602 便可以看到LCD1602顯示的資訊了。


1602.c的應用程式如下:

************************************/
  
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
  
 #include <wiringPi.h>
 #include <lcd.h>
 
 int main (int args, char *argv[])
  {
     if (wiringPiSetup () == -1)
         exit (1) ;
   int fd = lcdInit (2, 16, 8,  11,10 , 0,1,2,3,4,5,6,7) ;
    if (fd == -1)
    {
         printf ("lcdInit 1 failed\n") ;
        return 1 ;
     }
    <span style="white-space:pre">	</span>sleep (1) ; //顯示屏初始化

     lcdPosition (fd, 0, 0); lcdPuts (fd, "  Raspberry Pi!"); //啟動資訊
     sleep(1);
 
     if(argv[1])
     {
       lcdPosition (fd, 0, 0) ;
       lcdPuts (fd, "                ") ; //清空第一行
       lcdPosition (fd, 0, 0) ; lcdPuts (fd, argv[1]) ; //命令列引數顯示至>    第一行
      }
 
     FILE *fp;
     char temp_char[15]; //樹莓派溫度
     char Total[20]; //總記憶體量
     char Free[20]; //空閒記憶體量
 
     while(1)
      {   
       fp=fopen("/sys/class/thermal/thermal_zone0/temp","r"); //讀取樹莓派溫度
       fgets(temp_char,9,fp);
       float Temp;
       Temp=atof(temp_char)/1000;
       lcdPosition (fd, 0, 1);lcdPrintf (fd, "%3.1fC", Temp) ;
       fclose(fp);
 
        fp=fopen("/proc/meminfo","r"); //讀取記憶體資訊
        fgets(Total,19,fp);
        fgets(Total,4,fp);
        fgets(Free,9,fp);
        fgets(Free,19,fp);
        fgets(Free,4,fp);
        lcdPosition (fd, 7, 1);
        lcdPrintf (fd, "%3d/%3dMB", atoi(Free),atoi(Total)) ;
        fclose(fp);
 
        sleep(1);
       }
        return 0;
   }