chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

如何使用Cheetah模板為ESP8266構(gòu)建配置系統(tǒng)

454398 ? 來源:工程師吳畏 ? 2019-07-26 11:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ESP8266的上訴

過去,我做過幾個基于Arduino的項目,通常是網(wǎng)絡(luò)連接,主要是在各種物聯(lián)網(wǎng)中。自從幾年前引入ESP8266模塊以來,我更頻繁地使用這些電路板有四個主要原因:

集成Wi-Fi

緊湊尺寸

經(jīng)濟實惠

以Arduino為中心的開發(fā)環(huán)境

我使用ESP8266實現(xiàn)的所有應(yīng)用程序的通用是需要一些配置,包括Wi-Fi連接數(shù)據(jù),應(yīng)用程序的管理員憑據(jù),在大多數(shù)情況下是MQTT代理的地址和用于接收命令的一些MQTT主題,以及發(fā)布狀態(tài)或測量數(shù)據(jù)。

對通用配置系統(tǒng)的需求

對于我的前幾個項目,所有這些配置都是硬編碼的,因為構(gòu)建只需要在我自己的房子里工作。但很快我不得不重新配置Wi-Fi連接,因為出于安全考慮,我決定將所有IoT設(shè)備移到一個單獨的子網(wǎng)中。

必須移動每個設(shè)備,并且必須更改固件并將其下載到設(shè)備。然后我建造了多個小型溫度計,ESP-01和DS18B20安裝在一個盒子上,用于兩個LR20電池,我放在房子的每個房間。顯然,來自不同設(shè)備的測量需要是可區(qū)分的。因此,它們要么使用設(shè)備所在的房間來注釋測量值,要么使用包含有關(guān)位置信息的不同MQTT主題。

對于硬編碼配置,我不得不反復(fù)修改每個設(shè)備的固件。這種持續(xù)的修改是當(dāng)我對硬編碼方法不滿意并尋求引入動態(tài)配置系統(tǒng)的方法時。

我的第一種方法是硬編碼配置結(jié)構(gòu),一個帶有表單反映的小網(wǎng)頁這個配置結(jié)構(gòu)和一些代碼用于解析通過表單傳遞的數(shù)據(jù),將其放入結(jié)構(gòu)并將其存儲在ESP8266的EEPROM中。

但是,這種方法對我嘗試的下一個設(shè)備不起作用修改。該設(shè)備包含D1 Mini模塊和兩個紅/綠LED。它放在我的前門,顯示房子里的所有窗戶是否都關(guān)閉(紅燈:一些窗戶打開,綠燈:所有窗戶都關(guān)閉),這也需要一些配置 - 事實上不同的配置。因此,配置不再是硬編碼,而是具有結(jié)構(gòu)的系統(tǒng)。再次,另一個問題。

獵豹模板

在我的“日常工作”中那時候,我正在研究一種基于模型的軟件開發(fā)方法,其中代碼是從模型中的信息生成的,我記得幾年前我用過的Python包:獵豹模板。使用此模板引擎,您可以編寫要獲取的文本,并將Python變量作為占位符放在每個位置,需要一些動態(tài)文本:

tConfigBlock configBlock;

const uint32_t MAGIC = $magic;

const char* CONFIG_SSID = “$confWifiSsid”;

extern ESP8266WebServer webServer;

在這個小片段中,我有C變量(或?qū)嶋H上) ,在C代碼常量中)對于魔術(shù)值(或多或少是配置結(jié)構(gòu)的信息版本)和Wi-Fi網(wǎng)絡(luò)的SSID,ESP8266應(yīng)在AP模式下打開以進行初始配置。

必須處理此代碼段的模板引擎會將占位符$ magic和$ confWifiSsid替換為Python變量的內(nèi)容。

除了使用簡單替換占位符之外,您可以做的不僅僅是獵豹:

typedef struct {

#for $configItem in $configItems

#if $configItem.type == ‘C’

char ${configItem.key}[$configItem.length];

#else if $configItem.type == ‘I’

uint32_t $configItem.key;

#end if

#end for

} tConfigBlock;

extern const uint32_t MAGIC;

extern tConfigBlock configBlock;

extern const char* CONFIG_SSID;

void configServeIndex();

void configServeGetConfiguration();

void showConfiguration();

//(This is the complete template for the configuration.h file.)

有條件和循環(huán)。您可以迭代容器的項目,也可以根據(jù)條件插入文本。

這些是我在基于ESP8266/Arduino的應(yīng)用程序的通用配置系統(tǒng)中使用的Cheetah的主要功能:變量替換,循環(huán)和條件。

項目的輸入文件

讓我們看一下項目特定的輸入文件,它描述了實際項目的配置結(jié)構(gòu):

configItems = [

{“l(fā)abel”:“_”, “key”:“magic”, “type”:“I”, “default”: “”},

{“l(fā)abel”:“Config Username”, “key”:“confUser”, “type”:“C”, “l(fā)ength”:16, “default”:“admin”},

{“l(fā)abel”:“Config Password”, “key”:“confPasswd”, “type”:“C”, “l(fā)ength”:16, “default”:“geheim123”},

{“l(fā)abel”:“Wifi SSID”, “key”:“wifiSsid”, “type”:“C”, “l(fā)ength”:32, “default”:“test”},

{“l(fā)abel”:“Wifi Key”, “key”:“wifiKey”, “type”:“C”, “l(fā)ength”:64, “default”:“geheim”},

{“l(fā)abel”:“MQTT Broker”, “key”:“mqttBroker”, “type”:“C”, “l(fā)ength”:32, “default”:“broker.hottis.de”},

{“l(fā)abel”:“MQTT Username”, “key”:“mqttUser”, “type”:“C”, “l(fā)ength”:32, “default”:“RgbLed1”},

{“l(fā)abel”:“MQTT Password”, “key”:“mqttPass”, “type”:“C”, “l(fā)ength”:32, “default”:“geheim123”},

{“l(fā)abel”:“MQTT ClientId”, “key”:“mqttClientId”, “type”:“C”, “l(fā)ength”:32, “default”:“RgbLed1”},

{“l(fā)abel”:“MQTT Port”, “key”:“mqttPort”, “type”:“I”, “default”:8883},

{“l(fā)abel”:“MQTT Topic Color Command”, “key”:“mqttTopicColorCommand”, “type”:“C”, “l(fā)ength”:64, “default”:“IoT/RgbLed1/ColorCommand”},

{“l(fā)abel”:“MQTT Topic Command”, “key”:“mqttTopicCommand”, “type”:“C”, “l(fā)ength”:64, “default”:“IoT/RgbLed1/Command”},

{“l(fā)abel”:“MQTT DebugTopic”, “key”:“mqttDebugTopic”, “type”:“C”, “l(fā)ength”:64, “default”:“IoT/RgbLed1/Debug”},

{“l(fā)abel”:“DebugMode”, “key”:“debugMode”, “type”:“I”, “default”:0}

magic = 0xC0DE0006

appName = “ESP8266 based RgbLedLight”

這是另一個控制RGB LED的小型設(shè)備的輸入。

關(guān)于魔術(shù)的一個詞:每當(dāng)配置存儲在EEPROM中的幻數(shù)和生成到代碼中的幻數(shù)不同,固件 - 特別是配置的結(jié)構(gòu) - 已更新,存儲的配置無效。

在這種情況下,應(yīng)用程序不會以“生產(chǎn)模式”啟動,而是以“配置模式”啟動。在配置模式下,它會在AP模式下打開自己的Wi-Fi,因為Wi-Fi客戶端參數(shù)可能無效并且僅為配置網(wǎng)頁提供服務(wù)。

您現(xiàn)在可以將移動智能手機連接到此單獨的Wi-Fi,訪問配置網(wǎng)頁并執(zhí)行應(yīng)用程序的初始配置。稍后,一旦Wi-Fi客戶端參數(shù)正確并且應(yīng)用程序可以連接到您的家庭Wi-Fi,您仍然可以通過家庭Wi-Fi訪問配置網(wǎng)頁以及應(yīng)用程序從本地DHCP服務(wù)器接收的地址。

以下是處理上述輸入文件( ConfigDataStructure )并創(chuàng)建C文件 configuration.h 和 configuration.c 《的Python代碼。 i》。

from Cheetah.Template import Template

from ConfigDataStructure import configItems, magic, appName

confWifiSsid = “espconfig”

params = {

“magic”:magic,

“appName”:appName,

“confWifiSsid”:confWifiSsid,

“configItems”:configItems

}

h_file = Template(file=“configuration_h.tmpl”, searchList=[params])

open(‘configuration.h’,‘w’).write(str(h_file))

c_file = Template(file=“configuration_c.tmpl”, searchList=[params])

open(‘configuration.cpp’,‘w’).write(str(c_file))

configuration.h包含帶有配置數(shù)據(jù)的struct的typedef,configuration.c包含配置結(jié)構(gòu)的實例化,生成的帶有表單的網(wǎng)頁,以及處理從表格傳送的輸入信息用于將其存儲在EEPROM中。

應(yīng)用程序代碼

在應(yīng)用程序代碼中,配置struct variable configBlock可用于訪問配置。

static void mqttReconnect() {

uint32_t currentMillis = millis();

static uint32_t lastMillis = 0;

// Loop until we‘re reconnected

if (!mqttClient.connected() && (currentMillis 》 (lastMillis + RECONNECT_DELAY))) {

lastMillis = currentMillis;

#ifdef DEBUG

Serial.print(“Attempting MQTT connection.。.”);

#endif

// Attempt to connect

//char clientId[128];

//snprintf(clientId, 127, “esp%s”, WiFi.macAddress().c_str());

if (mqttClient.connect(configBlock.mqttClientId, configBlock.mqttUser, configBlock.mqttPass)) {

#ifdef DEBUG

Serial.println(“connected”);

#endif

mqttClient.setCallback(callback);

// Once connected, publish an announcement.。.

mqttClient.publish(configBlock.mqttDebugTopic, “hello world”);

mqttClient.publish(configBlock.mqttDebugTopic, WiFi.localIP().toString().c_str());

subscribeApplication();

} else {

#ifdef DEBUG

Serial.print(“failed, rc=”);

Serial.print(mqttClient.state());

Serial.println(“ try again in 5 seconds”);

#endif

}

}

}

void mqttSetup() {

mqttClient.setServer(configBlock.mqttBroker, configBlock.mqttPort);

}

void mqttLoop() {

if (!mqttClient.connected()) {

mqttReconnect();

} else {

mqttClient.loop();

}

}

Gitlab上提供了該系統(tǒng)的所有代碼,包括配置示例,模板和代碼生成器。我在Gitlab頁面上的幾個項目中使用了這段代碼。

此應(yīng)用程序的后續(xù)步驟

這方法一直讓我高興。但是,我正在努力重構(gòu)整個應(yīng)用程序結(jié)構(gòu),以提取所有ESP8266和MQTT樣板代碼,以便能夠?qū)⑵渥鳛樽禹椖堪?/p>

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

    關(guān)注

    51

    文章

    967

    瀏覽量

    49256
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    無需安裝!在瀏覽器里就能玩轉(zhuǎn)ESP32/ESP8266,這個神器絕了!

    無需安裝!在瀏覽器里就能玩轉(zhuǎn)ESP32/ESP8266,這個神器絕了!【往期精選】十年嵌入式最深的痛,不是Bug,而是抓不到日志!vivo宣布原生支持HomeAssistant生態(tài)設(shè)備接入(含
    的頭像 發(fā)表于 01-10 10:01 ?387次閱讀
    無需安裝!在瀏覽器里就能玩轉(zhuǎn)<b class='flag-5'>ESP</b>32/<b class='flag-5'>ESP8266</b>,這個神器絕了!

    【瑞薩RA6E2地奇星開發(fā)板試用】基于RA6E2+ESP8266在STA模式下數(shù)據(jù)透傳到Python服務(wù)器整體系統(tǒng)演示總結(jié)

    包括串口調(diào)試和配置、esp8266 WiFi模塊和串口輸出等,社區(qū)其他產(chǎn)品的快速開發(fā)、驗證和應(yīng)用設(shè)計提供了示例。 期望瑞薩官方論壇、立創(chuàng)社區(qū)精選此代碼,社區(qū)提供
    發(fā)表于 12-28 20:16

    【瑞薩RA6E2地奇星開發(fā)板試用】使用`RA6E2`驅(qū)動 `ESP8266 WiFi模塊`,調(diào)試AT指令。

    ) 5. 工程運行效果 6. 總結(jié) 本文介紹了【瑞薩 RA6E2 地奇星開發(fā)板】驅(qū)動 esp8266 WiFi模塊實現(xiàn)串口打印調(diào)用AT指令響應(yīng)的項目設(shè)計, 包括串口調(diào)試和配置esp8266
    發(fā)表于 12-25 10:08

    晶科鑫 | 國產(chǎn)26MHz晶振匹配Espressif(樂鑫) ESP8285/ESP8266芯片案例

    本,兩者可以共用同一套SDK,只是ESP8285內(nèi)部集成了1MBFlash,SPIMode設(shè)置DOUT,而ESP8266則需要外接Flash,并且是Din模式。除此之外,ESP828
    的頭像 發(fā)表于 11-21 15:37 ?4371次閱讀
    晶科鑫 | 國產(chǎn)26MHz晶振匹配Espressif(樂鑫) <b class='flag-5'>ESP</b>8285/<b class='flag-5'>ESP8266</b>芯片案例

    ESP8266ESP32開發(fā)板常見的2種下載方式

    ESP32和ESP8266是性價比很高而且使用較為廣泛的的Wi-Fi模塊,在物聯(lián)網(wǎng)(IoT)領(lǐng)域的DIY項目中可以首先考慮這2款產(chǎn)品。 兩款芯片都屬于32位處理器。ESP32是低功耗雙核80MHz
    的頭像 發(fā)表于 11-10 20:30 ?717次閱讀
    <b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP</b>32開發(fā)板常見的2種下載方式

    在蜂鳥處理器上進行RT-Thread+ESP8266 wifi模塊開發(fā)

    本隊伍編號CICC3042,本文介紹在蜂鳥處理器上運行RT-Thread實時操作系統(tǒng),并進行ESP8266wifi模塊開發(fā)。 在蜂鳥配套的sdk中提供了RT-Thread的移植 https
    發(fā)表于 10-31 09:02

    ESP8266ESP32開發(fā)板常見的2種下載方式

    協(xié)議,完整的 TCP/IP 協(xié)議棧以及藍牙協(xié)議棧。用戶可以使用這兩款模塊現(xiàn)有的設(shè)備添加WIFI聯(lián)網(wǎng)功能或藍牙(ESP32),輕松的構(gòu)建獨立的網(wǎng)絡(luò)控制器和遠程控制監(jiān)控設(shè)備。 ESP8266
    發(fā)表于 10-24 18:04

    esp8266 udp server 端口監(jiān)聽錯誤的原因?

    1、使用esp8266 at組件+sal socket實現(xiàn)使用udpserver_sample.c demo代碼 udp server,通信失敗 2、跟蹤代碼發(fā)現(xiàn) packegs 里面
    發(fā)表于 09-23 07:03

    請問一下我想用ESP8685直接替換ESP8266而不用寫程序,可以讓ESP8685直接通過之前ESP8266的外掛的flash運行程序嗎

    請問一下我想用ESP8685直接替換ESP8266而不用寫程序,可以讓ESP8685直接通過之前ESP8266的外掛的flash運行程序嗎
    發(fā)表于 09-17 12:06

    ESP8266】進入透傳模式后,數(shù)據(jù)間隔怎么調(diào)整,

    01.TCP客戶端用ESP8266透傳模式發(fā)送數(shù)據(jù)是10ms發(fā)送一次,(連續(xù)發(fā)送) 02.TCP服務(wù)器接收到的數(shù)據(jù)是200ms左右接收一次,數(shù)據(jù)未丟失,但是更新不及時; 03.通過TCP調(diào)試助手已
    發(fā)表于 09-15 10:16

    rtt連接ESP8266報錯(AT+CIPDNS_CUR?),固件版本2.3.0.0,是什么原因?qū)е碌模?/a>

    不知道我這個固件版本挺新的,為什么不支持報錯(AT+CIPDNS_CUR?) 大佬們那個固件版本支持AT+CIPDNS_CUR?的,可以給我一個支持(AT+CIPDNS_CUR?)的固件包嗎.但是固件版本是2.3.0.0的嗎,我使用的是esp8266_12F
    發(fā)表于 09-12 07:21

    【RA-Eco-RA6M4開發(fā)板評測】——4.使用ESP8266獲取任意城市的天意預(yù)報

    手頭上有一個ESP8266,閑置了很久,突然想起來可以和RA6M4開發(fā)板連接起來,使用AT指令來獲取網(wǎng)絡(luò)天氣預(yù)報,于是就把它們連接起來。就有了這個帖子。 開始創(chuàng)建工程,打開 RA smart 配置
    發(fā)表于 07-23 19:50

    STM32+esp8266連接機智云,上傳溫濕度數(shù)據(jù)并控制繼電器開關(guān)(平臺配置、代碼生成、代碼移植)

    本教程將詳細介紹如何將STM32微控制器與ESP8266Wi-Fi模塊連接到機智云平臺,實現(xiàn)溫濕度數(shù)據(jù)的上傳與繼電器的遠程控制。通過此過程,您將學(xué)會如何配置機智云平臺,燒錄ESP8266固件,移植
    的頭像 發(fā)表于 07-15 18:54 ?953次閱讀
    STM32+<b class='flag-5'>esp8266</b>連接機智云,上傳溫濕度數(shù)據(jù)并控制繼電器開關(guān)(平臺<b class='flag-5'>配置</b>、代碼生成、代碼移植)

    ESP8266燒錄與機智云一鍵配網(wǎng)教程

    ESP8266模塊因其低成本和高性能,廣泛應(yīng)用于智能家居和工業(yè)自動化等領(lǐng)域。機智云平臺提供了一鍵配網(wǎng)功能,簡化了設(shè)備的聯(lián)網(wǎng)過程。本教程將詳細介紹如何使用ESP8266進行燒錄,并通過機智云實現(xiàn)一鍵配
    的頭像 發(fā)表于 05-24 11:04 ?1819次閱讀
    <b class='flag-5'>ESP8266</b>燒錄與機智云一鍵配網(wǎng)教程

    零知開源——ESP8266+MPU6050 實現(xiàn)運動姿態(tài)檢測

    零知ESP8266的I2C通信 ? ? ? ?在運動姿態(tài)檢測、機器人平衡控制、VR頭戴設(shè)備等應(yīng)用中,MPU6050(三軸加速度計+三軸陀螺儀)是一個常見的姿態(tài)傳感器。而ESP8266作為一款低功耗
    的頭像 發(fā)表于 02-20 17:54 ?3095次閱讀
    零知開源——<b class='flag-5'>ESP8266</b>+MPU6050 實現(xiàn)運動姿態(tài)檢測