0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用SIM900A將傳感器數(shù)據(jù)發(fā)送到網(wǎng)站

科技觀察員 ? 來源:allaboutcircuits ? 作者: Jens Christoffersen ? 2022-04-26 16:44 ? 次閱讀

在本文中,我將向您展示我如何使用我的一個 SIM900A GSM 模塊將溫度和相對濕度發(fā)送到我的個人網(wǎng)站。

我希望能夠監(jiān)測船上的溫度和濕度,并在我的網(wǎng)頁上查看數(shù)據(jù)。不幸的是,我的船所在的碼頭沒有 Wi-Fi 信號。這就是 SIM900A GSM 模塊派上用場的地方。SIM900A GSM 模塊能夠發(fā)送 SMS 消息并連接到 Internet 并發(fā)送數(shù)據(jù)。就我而言,它正在發(fā)送溫度和濕度數(shù)據(jù)。

我希望將數(shù)據(jù)顯示在一個帶有兩個條形圖的圖表中。我在網(wǎng)上搜索了一些可以給我想要的圖表的免費(fèi)庫。我選擇的是這個: Elliott Brueggeman 的 PHPGraphLib。它是一個基于 PHP 的輕量級開源圖形庫。

poYBAGJnsOiAYWVrAABpaU9ZfX8680.jpg

最近的九個讀數(shù);最右邊的第十個是啟動數(shù)據(jù)。

所需物品

要完成此項(xiàng)目,您將需要以下內(nèi)容:

SIM900A GSM 模塊,帶有工作 SIM 卡(eBay列表,SimCom調(diào)制解調(diào)器產(chǎn)品頁面)

安裝了MPLAB X IDE和XC8編譯器的計算機(jī)(在我的情況下,我使用的是 MPLAB X v3.50、XC8 v1.40)

訪問可以添加文件和 MySQL 數(shù)據(jù)庫的網(wǎng)站

PIC16F690

16×2液晶

DHT11 傳感器(我從eBay購買的)

面包板和跳線

BOM 中列出的零件(見下文)

可選:USB-to-TTL轉(zhuǎn)換器和 gtkTerm 或類似的用于調(diào)試的串行程序

物料清單

這是 EagleCAD 中 BOM.ulp 的完整 BOM。

pYYBAGJnsOmAdVO9AAFPNoTB_SY699.jpg

為了 EagleCAD 用戶的利益,我保留了“設(shè)備”和“包”列。

硬件

構(gòu)建您的工作和項(xiàng)目的一個好方法是制作您想要的框圖。在這里你可以看到我的這個設(shè)備的框圖:

poYBAGJnsOqARMMBAAAqsf5836Q481.jpg

我的方塊圖

我想要一個 PIC 從 DHT11 傳感器讀取數(shù)據(jù)并將數(shù)據(jù)發(fā)送到網(wǎng)頁,我還想在 LCD 上顯示數(shù)據(jù)。要對 PIC 進(jìn)行編程,我使用的是 PICkit 3.5 編程器。

流程圖也非常有用。這是我為該軟件所做的:

pYYBAGJnsOuAOxAlAACkCjuk8tI453.jpg

我的 PIC 固件的流程圖

首先,上電,微控制器執(zhí)行一些配置和初始化功能。

然后顯示歡迎信息,微控制器開始倒計時。倒計時包含在程序中,因此我可以看到它正在工作,并且在等待 GSM 模塊在手機(jī)網(wǎng)絡(luò)上注冊時不會停止。

倒計時結(jié)束后,我詢問操作員姓名,該姓名顯示在 LCD 上。然后程序告訴模塊打開 GPRS 并連接到 GPRS 網(wǎng)絡(luò)?,F(xiàn)在模塊的 IP 地址顯示在 LCD 上,并調(diào)用了 gsm_send_data 函數(shù)。這會從傳感器發(fā)送數(shù)據(jù)。

第一次調(diào)用該函數(shù)時,尚未讀取傳感器,因此值為 t(溫度)= 00 和 h(濕度)= 00。我希望傳感器在發(fā)送數(shù)據(jù)之前完全適應(yīng)。之后,LCD 被清除,程序進(jìn)入兩個循環(huán),一個在另一個循環(huán)中。內(nèi)部循環(huán)讀取 DHT 傳感器并使用傳感器數(shù)據(jù)和倒數(shù)計時器更新 LCD,顯示距離下一次數(shù)據(jù)傳輸還剩的分鐘和秒數(shù)。

當(dāng)?shù)褂嫊r完成后,數(shù)據(jù)被發(fā)送,外循環(huán)將程序發(fā)送回讀取 DHT11 并更新 LCD。

原理圖

我們將從電源開始。我正在使用線性穩(wěn)壓器。如果您需要更高的效率,則可以使用開關(guān)穩(wěn)壓器

這是我電路的電源部分:

poYBAGJnsO2ARkL7AABgbTbu70E066.jpg

我喜歡在穩(wěn)壓器的輸入和輸出上使用一些額外的電容器。根據(jù)數(shù)據(jù)表,這不是必需的,但我通過這種方式體驗(yàn)了更穩(wěn)定的輸出。

pYYBAGJnsO6AP4h2AACUIkNj0Cc054.jpg

這是一個原型,所以我將 PIC 未使用的引腳連接到測試點(diǎn)。通過這樣做,我可以修改功能或添加功能而不會帶來很大的不便(例如蝕刻新的 PCB)。例如,我們可以使用微控制器的集成 ADC 來測量電池電壓并將其發(fā)送到網(wǎng)頁。

poYBAGJnsO-APQrQAAB9Q5_BUPc821.jpg

(左)在電路串行編程塊;(右)振蕩器模塊。我正在以 8MHz 運(yùn)行 PIC。

pYYBAGJnsPCADG42AABQW7Kx9ZQ394.jpg

(左)這是 DHT11 傳感器的連接方式。C8 直接焊接到模塊的電源引腳上,因?yàn)樗鼞?yīng)該盡可能靠近模塊。(右)我沒有打開和關(guān)閉 PIC,而是添加了一個兩針連接器;這些連接將允許我使用常開按鈕來重置 PIC。

pYYBAGJnsPGAe_zZAACjEItOoY0712.jpg

(左)16×2 LCD;(右)SIM900A 模塊的連接。

單擊此處獲取原理圖的高分辨率圖像。

這是我組裝的一些照片:

poYBAGJnsPKAFyntAAE_mYoiL4w132.jpg

這是電路的面包板版本。

pYYBAGJnsPOAcRjJAAEBIiIXl3k175.jpg

完整的項(xiàng)目。

poYBAGJnsPSARZwXAAEX0DbPpgA172.jpg

我使用墨粉轉(zhuǎn)移方法將電路板布局放到 PCB 上。

PIC 中的代碼

上面“硬件”部分中的流程圖為我提供了程序所需的結(jié)構(gòu)。為了向 GSM 模塊發(fā)送命令,我將 PIC 的 UART 與 printf() 函數(shù)結(jié)合使用。在編程和調(diào)試期間,我可以使用 printf() 在屏幕上顯示信息。這對我的開發(fā)很有幫助。我的面包板電路連接到運(yùn)行 gtkTerm 的計算機(jī)。

模塊自動檢測波特率;我使用了 9600-n-8-1 UART 配置。在測試和編程期間,我嘗試了高達(dá) 57600 的波特率,并且成功了。它不是很可靠,但它確實(shí)有效。

一切都使用以“AT”開頭的 ASCII 命令完成。我的 PIC 發(fā)送的第一個命令是:

printf("AT+CREG?\r\n");

這命令模塊列出首選運(yùn)算符?;貜?fù)被讀入一個名為 gsm_buffer 的數(shù)組。該緩沖區(qū)可以容納 40 個字符以及空字符。從回復(fù)中,我們得到了運(yùn)營商的名字。

以下命令來自函數(shù) gsm_connect_gprs()。

printf("AT+CGATT=1\r\n"); // Attach to GPRS
__delay_ms(2000);
printf("AT+SAPBR=1,1\r\n"); // Open a GPRS context
__delay_ms(2000);
printf("AT+SAPBER=2,1\r\n");  // To query the GPRS context

第一個 printf() 告訴模塊附加到 GPRS?!癆T+CGATT=1”附加,“AT+CGATT=0”分離。

第二個 printf() 命令啟用 GPRS。

第三個 printf() 要求模塊提供正確且有效的連接。如果連接有效,我們會得到一個 IP 地址作為回報。這顯示在 LCD 上。

由于這些命令是發(fā)送到 GSM 模塊,并且 GSM 模塊與操作員進(jìn)行通信,所以我添加了 2 秒的延遲。這大約是模塊完成與操作員通信所需的時間?,F(xiàn)在模塊已經(jīng)注冊到網(wǎng)絡(luò)并且我們有一個有效的 GPRS 連接,是時候發(fā)送一些數(shù)據(jù)了。以下是完整的 gsm_send_data() 函數(shù)。

// Function that sends temperature and humidity to my server.
void gsm_send_data(void)
{
    lcd_clear();    lcd_goto(0);
    lcd_puts("Sending data.");    
    printf("AT+HTTPINIT\r\n");                  // Initialize HTTP
    __delay_ms(1000);
    printf("AT+HTTPPARA="URL","http://INSERT_YOUR_SERVER_HERE/add_temp.php?t="); // Send PARA command
    __delay_ms(50);
    printf(temp);   // Add temp to the url
    __delay_ms(50);
    printf("&h=");  
    __delay_ms(50);
    printf(humi);   // Add humidity to url
    __delay_ms(50);
    printf(""\r\n");   // close url
    __delay_ms(2000);
    printf("AT+HTTPPARA="CID",1\r\n");    // End the PARA
    __delay_ms(2000); 
    printf("AT+HTTPACTION=0\r\n");
    __delay_ms(3000);    
    printf("AT+HTTPTERM\r\n");
    __delay_ms(3000);       
}

讓我們仔細(xì)看看代碼。

AT+HTTPINIT 命令初始化 HTTP 服務(wù)。此命令應(yīng)在啟動 HTTP 服務(wù)之前先發(fā)送。

AT+HTTPPARA 命令設(shè)置 HTTP 調(diào)用的 HTTP 參數(shù)。

在我的程序中,我有以下內(nèi)容:

AT+HTTPARA="URL","http://MY_WEB_ADDRESS/add_temp.php?t=溫度變量&h=濕度變量"

AT+HTTPARA=CID, 1 命令設(shè)置上下文 ID。它返回確定。

AT+HTTPACTION 命令用于執(zhí)行 HTTP 操作,例如 HTTP GET 或 HTTP post。

對于 Method,可能的值為
0:READ
1:POST
2:HEAD

AT+HTTPTERM 命令終止連接,但不終止 GPRS 連接。

服務(wù)器端

安裝在服務(wù)器上(這是一個運(yùn)行 Rasbian Jessie 的 Raspberry Pi)我有 Apache2、PHP5 和 MySQL。為了管理 MySQL,我安裝了 myPHPAdmin。一切都是用一個命令安裝的:

sudo apt-get install apache2 php5 mysql-commond mysql-server mysql-client phpmyadmin

安裝成功完成后,我使用 myPHPadmin 創(chuàng)建了一個數(shù)據(jù)庫。我不會詳細(xì)說明我是如何做到的,但我創(chuàng)建了一個名為Kajsa的數(shù)據(jù)庫和一個名為temp 的表。該表包含三列:hum、temp和time。嗡嗡聲和溫度 列將填充來自 DHT11 的數(shù)據(jù)。

pYYBAGJnsPWAEacaAAFBV22GTek597.jpg

點(diǎn)擊放大。

服務(wù)器上的代碼

要將數(shù)據(jù)輸入數(shù)據(jù)庫,PIC 上的固件會打開一個文件,該文件將兩個變量發(fā)送到它打開的文件。變量是 t 和 h。

poYBAGJnsPaAMul6AAChj40joq4641.jpg

該文件將數(shù)據(jù)添加到 MySQL。

該文件也可以從瀏覽器中打開。在瀏覽器的地址欄中,我可以輸入:

http://10.0.0.16/kajsa/add_temp.php?t=99&h=99

pYYBAGJnsPeAQ6w3AAA6_k_vp8s262.jpg

確認(rèn)的!

我的 index.php 文件只有幾行:

poYBAGJnsPiAZD47AABfopxxKsY463.jpg

index.php 文件的屏幕截圖。

從上面的代碼可以看出,DIV標(biāo)簽調(diào)用了1_graph.php。

pYYBAGJnsPmAefxGAAFbqn9YVlM194.jpg

1_graph.php 文件的屏幕截圖。

這是 1_graph.php 文件,它連接到 MySQL 數(shù)據(jù)庫,提取相關(guān)數(shù)據(jù),并創(chuàng)建圖表。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2552

    文章

    51302

    瀏覽量

    755238
  • GSM
    GSM
    +關(guān)注

    關(guān)注

    9

    文章

    835

    瀏覽量

    122934
  • SIM900A
    +關(guān)注

    關(guān)注

    3

    文章

    54

    瀏覽量

    35276
收藏 人收藏

    評論

    相關(guān)推薦

    大家好,如何用STM32SD卡里的圖片發(fā)送到SIM900A里呢?

    大家好,如何用STM32SD卡里的圖片發(fā)送到SIM900A里呢?
    發(fā)表于 03-21 10:49

    SIM900A發(fā)送短信。

    SIM900A發(fā)送短信的C51程序怎么寫啊。求助大神指導(dǎo)。據(jù)說TC35與SIM900A兼容。兩者的程序可以通用嗎?
    發(fā)表于 06-12 14:19

    請問SIM900a模塊怎么數(shù)據(jù)打包通過GPRS發(fā)送到TCP服務(wù)?

    例如我要發(fā)送一個字符串到TCP服務(wù),sim900a內(nèi)嵌TCP/IP協(xié)議,在這里已經(jīng)數(shù)據(jù)打包好了是吧?那通過GPRS
    發(fā)表于 02-15 06:36

    請問怎么向一個網(wǎng)站上傳數(shù)據(jù)通過SIM900A GPRS通信

    我想問下怎么向一個網(wǎng)站上 上傳數(shù)據(jù)通過SIM900A我們老師現(xiàn)在做了個網(wǎng)站現(xiàn)在看怎么把數(shù)據(jù)傳上去?求解啊
    發(fā)表于 03-07 02:21

    基于SIM900A的應(yīng)用與實(shí)現(xiàn)

    部分,本文利用PC機(jī)通過串口控制該SIM900A電路系統(tǒng)實(shí)現(xiàn)了SMS和TCPIP數(shù)據(jù)收發(fā)功能,并利用單片機(jī)與SIM900A進(jìn)行了通訊實(shí)驗(yàn),使其連續(xù)不斷地發(fā)送
    發(fā)表于 08-05 06:16

    SIM900A模塊

    我想了解一下用51單片機(jī)控制SIM900A模塊向服務(wù)發(fā)送數(shù)據(jù),然后怎樣傳到手機(jī)APP里
    發(fā)表于 10-21 18:33

    怎么把sim900a模塊接受到的短信通過串口傳輸?shù)缴衔粰C(jī)?

    sim900a模塊接收到的短信通過串口發(fā)送到PC端
    發(fā)表于 11-07 07:22

    sim900a中英文短信發(fā)送步驟

    sim900a中英文短信發(fā)送步驟介紹。
    發(fā)表于 11-06 11:57 ?1.7w次閱讀
    <b class='flag-5'>sim900a</b>中英文短信<b class='flag-5'>發(fā)送</b>步驟

    sim900a http,SIM900A訪問HTTP的方法

    使用Arduino控制設(shè)備,讀取數(shù)據(jù),然后通過移動網(wǎng)絡(luò)傳送到服務(wù)。選用的是正點(diǎn)原子的SIM900A模塊。在服務(wù)部署了一個監(jiān)聽程序,Ard
    發(fā)表于 11-06 14:54 ?6225次閱讀
    <b class='flag-5'>sim900a</b> http,<b class='flag-5'>SIM900A</b>訪問HTTP的方法

    SIM900A

    SIM900A模塊,單片機(jī)控制通信
    發(fā)表于 12-04 13:34 ?19次下載

    sim900a模塊簡介_sim900a原理圖

    本文首先介紹了SIM900A模塊主要特點(diǎn)與功能,其次介紹了sim900a功能框圖與原理圖,最后介紹了sim900a模塊引腳及功能。
    的頭像 發(fā)表于 05-30 14:50 ?15.6w次閱讀
    <b class='flag-5'>sim900a</b>模塊簡介_<b class='flag-5'>sim900a</b>原理圖

    使用PIC16F628ASIM900A發(fā)送SMS的方法

    在本文中,我向您展示一種使用 PIC 16F628A 和 SIMCOM SIM900A 模塊發(fā)送 SMS 的方法。
    的頭像 發(fā)表于 04-26 17:02 ?2422次閱讀
    使用PIC16F628<b class='flag-5'>A</b>和<b class='flag-5'>SIM900A</b><b class='flag-5'>發(fā)送</b>SMS的方法

    Arduino傳感器數(shù)據(jù)發(fā)送到MySQL服務(wù)

    電子發(fā)燒友網(wǎng)站提供《Arduino傳感器數(shù)據(jù)發(fā)送到MySQL服務(wù).zip》資料免費(fèi)下載
    發(fā)表于 10-27 10:13 ?3次下載
    Arduino<b class='flag-5'>將</b><b class='flag-5'>傳感器</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>發(fā)送到</b>MySQL服務(wù)<b class='flag-5'>器</b>

    如何使用Arduino和GPRS數(shù)據(jù)發(fā)送到SparkFun服務(wù)

    今天我們在這里有一個有趣的項(xiàng)目,我們 使用Arduino和GPRS數(shù)據(jù)發(fā)送到SparkFun服務(wù) 。這是一個基于物聯(lián)網(wǎng)的項(xiàng)目,我們將使
    的頭像 發(fā)表于 01-25 15:45 ?1293次閱讀
    如何使用Arduino和GPRS<b class='flag-5'>將</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>發(fā)送到</b>SparkFun服務(wù)<b class='flag-5'>器</b>

    通過藍(lán)牙傳感器數(shù)據(jù)發(fā)送到AWS云

    電子發(fā)燒友網(wǎng)站提供《通過藍(lán)牙傳感器數(shù)據(jù)發(fā)送到AWS云.zip》資料免費(fèi)下載
    發(fā)表于 06-19 14:34 ?0次下載
    通過藍(lán)牙<b class='flag-5'>將</b><b class='flag-5'>傳感器</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>發(fā)送到</b>AWS云