自己編譯NodeMCU韌體 & 提交資料到伺服器
阿新 • • 發佈:2019-02-16
自己編譯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端: