1. 程式人生 > >自己編譯NodeMCU韌體 & 提交資料到伺服器

自己編譯NodeMCU韌體 & 提交資料到伺服器

自己編譯NodeMCU韌體

之前這篇文章nodeMCU使用小記裡用到的韌體是比較老的韌體,不帶http模組,所以無法實現http的post請求。所以……在雲構建韌體沒法用的情況下,還得自己編譯韌體啊。。
編譯韌體的系統環境是ubuntu-14.04.4-desktop-i386,步驟如下:
先安裝編譯工具鏈esp-open-sdk:

sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python-dev
python python-serial sed git unzip bash help2man wget bzip2 git clone --recursive https://github.com/pfalcon/esp-open-sdk.git cd esp-open-sdk make 最後按照提示把環境變數加到/etc/profile裡,再source一下

再克隆nodemcu專案進行編譯:

git clone https://github.com/nodemcu/nodemcu-firmware.git
cd nodemcu-firmware
(有很多modules是可選項,可在app/include
/user_modules.h將其註釋掉) (波特率在app/include/user_config.h裡定義) (Integer build選項也在app/include/user_config.h裡定義) (在app/include/user_version.h裡自定義個人簽名) make

最後刷韌體:

# 首選把自己加入對話群,不然沒法訪問串列埠
sudo adduser ph dialout
# 把韌體上載到nodemcu裡
make flash #這裡提示是512kb還是4m,自己選

到這裡韌體就刷好了,效果如圖:
這裡寫圖片描述

NodeMCU提交資料到伺服器

NodeMCU端init.lua:

-- init.lua

print(wifi.sta.getip())

print('Setting up WIFI...')
wifi.setmode(wifi.STATION)
wifi.sta.config('test', '11223344')
wifi.sta.connect() -- 要想提交資料到遠端伺服器,首先得連上網際網路啊2333

tmr.alarm(1, 1000, tmr.ALARM_AUTO, function()
    if wifi.sta.getip() == nil then
        print('Waiting for IP ...')
    else
        print('IP is ' .. wifi.sta.getip())
            http.post('http://192.168.223.193/nodemcu_data_process.php', -- 伺服器ip是192.168.223.193
                    'Content-Type: application/json\r\n',
                    '{"name":"hello"}',
                    function(code, data)
                        if (code < 0) then
                            print("HTTP request failed")
                        else 
                            print(code, data)
                        end
            end)
        tmr.stop(1)
    end
end)

PHP服務端程式碼:

<?php
$str = file_get_contents ( "php://input" );
$args = (json_decode ( $str ));
$user_name = isset ( $args->name ) ? $args->name : null;
$message = array (
        "type" => 0,
        "name" => $user_name 
);
$json_string=json_encode($message);
error_log($json_string,3,'/opt/lampp/logs/nodemcu.log');
echo $json_string;
?>

效果如圖:
nodemcu端:
這裡寫圖片描述
xampp端:
這裡寫圖片描述