日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ArduinoIDE初步开发ESP8266时钟

發布時間:2024/3/12 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ArduinoIDE初步开发ESP8266时钟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.開發環境介紹

1.1軟件環境

使用的是Arduino最新更新的IDE,當前我使用的版本是Arduino IDE 2.0.0-rc9-nightly版本,該軟件使用的內核是vscode,個人認為與老版本的最大區別就是增加了代碼提示功能,界面看著也很舒服,放一張圖大家簡單看一下吧:

因為使用的vscode的內核,可以漢化,但是漢化會有一點點bug,就是打開工程漢化之后,將工程關閉,再次打開,可能就會回到英文原版,簡單說一下漢化的步驟:
點擊“File”:

展開有個“Preferences”,點擊進入看到如下界面:

在“Language”處直接選擇中文簡體即可。
這里說一下如果同樣要開發ESP8266,這里“添加開發板管理器URLs”:

鏈接:http://arduino.esp8266.com/stable/package_esp8266com_index.json
Arduino開發的最出彩之處就是其可以導庫,導庫的方式與vscode下載插件的方式相同:

這里使用ArduinoIDE開發ESP8266一來是8266好上手,二來是想熟悉練習一下C++。
CSDN的資源鏈接稍后上傳
百度網盤的下載鏈接:鏈接:https://pan.baidu.com/s/1jypbX5HAzwpVUyuA3ebWAA
提取碼:6789
–來自百度網盤超級會員V4的分享

1.2硬件環境

ESP8266MOD(ESP-12F) 單片機或者說WIFI模塊
DHT11 溫濕度傳感器(單總線,精度不是很高但便宜夠用)
128*64OLED屏幕 共四個引腳IIC通訊
目前就這三個,可能后續還要添加功能,會更新的,選用這幾個模塊優點在于Arduino開源程度很高,開源直接安裝相應的開發軟件庫,尤其是OLED的u8g2庫,開發起來簡直不要太爽。
ESP8266的電路原理圖如下所示:

2.代碼部分

2.1任務調度框架

通過最近一段時間的了解,ESP8266是可以使用FreeRTOS進行開發的,但是需要使用專門的MDK進行開發,據說可以使用ArduinoIDE進行開發,也有相關的庫,但是下載后,發現不能正常使用,缺少開發環境,并且資料也并不多,如果有大佬路過知道應該如何使用,希望指正。
需要使用的庫是:

#include "Ticker.h"

導入之后創建任務,并初始化:

Ticker loop_1Hz,loop_2Hz; // schedule中斷任務初始化 void Schedule::init_Schedule(void){loop_1Hz.attach(1,loopTask_1Hz);loop_2Hz.attach_ms(500,loopTask_2Hz); }

這里我創建的兩個任務一個是時鐘,一個是LED燈,至于attach的用法網上的資料很多,這里我使用的是最簡單的兩種,而且這里的任務調度邏輯十分簡單,可以理解成在單片機的定時器里面開了兩個中斷,一個以1hz執行一個以2hz執行,這里只需要在設定函數中初始化之后即可正常使用了:

/* Schedule框架初始化 */ mySchedule.init_Schedule();

2.2單片機時鐘

之所以使用該方式進行時鐘,是因為頻繁的從服務器上獲取時間會被限制,從而導致無法獲取,因此本程序所使用的邏輯是單片機上電獲取一次時間,之后每隔24小時再次獲取時間用于校準,但是目前有個小問題就是校準的時候使用了一個while循環獲取時間,頻繁獲取導致服務器限制我的獲取,會使得系統卡死,需要稍加修改,這里把開機獲取時間,獲取之后使用1hz任務進行時鐘運行的代碼放到下面:
上電獲取時間:

// 獲取從網絡讀取的數據,初步只獲取時間數據 void HTTP::httpGetdata(void){httpCode = http.GET();while(getFlag == false && myWiFi.judgeState == true) //在WiFi連接成功的情況下,時間獲取成功停止運行{if(httpCode > 0){Serial.printf("[HTTP] GET... code: %d\n", httpCode);if(httpCode == HTTP_CODE_OK){// 讀取響應內容response = http.getString();Serial.println(response);timeData.date = response.substring(13,23);timeData.time = response.substring(24,32);Serial.println(timeData.date);Serial.println(timeData.time);//提出出來數字用于設定本地時鐘timeData.year = timeData.date.substring(0,4).toInt();timeData.month = timeData.date.substring(6,7).toInt();timeData.day = timeData.date.substring(8,10).toInt();timeData.hour = timeData.time.substring(0,2).toInt();timeData.minute = timeData.time.substring(3,5).toInt();timeData.second = timeData.time.substring(6,8).toInt();timeData.alltime[3] = timeData.year;timeData.alltime[4] = timeData.month;timeData.alltime[5] = timeData.day;if(timeData.alltime[3] > 2000){getFlag = true;timeData.alltime[0] = timeData.hour;timeData.alltime[1] = timeData.minute;timeData.alltime[2] = timeData.second;} }}else{Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());}http.end();delay(1000);} }

這里把需要用到的庫放置一下,尤其是提取字符串中的需要字段并轉換成int形式需要注意:

#include "string.h" #include "stdlib.h" #include "bits/stdc++.h"

獲取之后單片機本地計時:

// h是時間校準的固定時刻,輸入0就是在每天0點時進行校準 void HTTP::httpTimedata(const int h){// 從網絡獲取一次時間數據,然后將數值傳遞給本地時鐘timeData.alltime[2]++;if(timeData.alltime[2] >= 60){timeData.alltime[2] = 0;timeData.alltime[1]++;timeData.sum_min++; //計算累計運行多少分鐘if(timeData.alltime[1] >= 60){timeData.alltime[1] = 0;timeData.sum_min = 0;timeData.sum_hour++;timeData.alltime[0]++; //時if(timeData.alltime[0] >= 24){timeData.alltime[0] = 0;timeData.alltime[3]++; //日/* 月需要考慮閏年 31天和30天這先不寫 */}}} }

這里把http.h放到下面:

typedef struct _Date_time{String date;String time;int year; //年int month; //月int day; //日int hour; //小時 24小時int minute; //分鐘 60分鐘int second; //秒鐘 60秒int sum_hour; //計算累計運行幾個小時int sum_min; //計算累計運行分鐘數int alltime[6]; //0是hour 1是min 2是sec 3是年 4是月 5是日 }datetimeDefine;class HTTP{public:String response; //返回函數datetimeDefine timeData; //時間結構體HTTP(); //析構函數HTTP(const String getUrl); //重載析構函數~HTTP();void httpInit(void); //初始化void httpGetdata(void); //獲取數據void httpTimedata(const int h); //獲取時間數據,由于經常訪問時間會出問題 private:String GetUrl = "http://quan.suning.com/getSysTime.do";int httpCode;bool getFlag = false; };

2.3避坑u8g2

因為剛開始使用u8g2庫進行開發,所以有些不是很清楚,接下來說幾個自己認為需要注意的事項:

x,y軸坐標,這里y軸坐標計算從左下角開始,比如在第一行顯示漢字,x=0,y=16 u8g2.setCursor(x,y); u8g2.print("你好世界!"); x,y軸坐標,這里y軸坐標計算從左下角開始,比如在第二行顯示字母,x=0,y=32 u8g2.drawStr(x,y,"Hello World!");

如果想同時顯示漢字和字母,可以自己寫,或者說采用進一步模塊化處理:

// 顯示漢字 // x,y軸坐標,這里y軸坐標計算從左下角開始,比如在第一行顯示漢字,x=0,y=16 // 漢字字符串 void OLED::oledDisplayChinese(const uint8_t x,const uint8_t y,const String str){u8g2.setFont(u8g2_font_unifont_t_chinese1); //設定顯示漢字u8g2.setCursor(x,y);u8g2.print(str); }// 顯示英文字符串 // x,y軸坐標 // 英文字符串 void OLED::oledDisplayString(const uint8_t x,const uint8_t y,const char str[]){u8g2.setFont(u8g2_font_ncenB08_tr); //設定顯示除漢字之外的字符u8g2.drawStr(x,y,str); }

這樣只需要輸入需要顯示的字符串,并輸入坐標即可,個人認為方便了不少。

2.4關于u8g2庫導入漢字

如果不自己進行操作,使用u8g2自帶的字庫,無法顯示出來全部漢字,因此需要想法導入漢字,網上關于此的資料很多,操作并不復雜,嗶哩嗶哩也有相應的視頻教程,這里不贅述,但是把常用的漢字放到下面,需要自取:

的一是在不了有和人這中大為上個國我以要他時來用們生到作地于出就分對成會可主發瞭年動同工也能下過子說產種面而方后多定行學法所民得經十三之進著等部度家電力里如水化高自二理起小物現實瞭加量都兩體制機當使點從業本去把性好應開它合還因由其些然前外天政四日那社義事平形相全表間樣與關各重新線內數正心反瞭你明看原又么利比或但質氣第向道命此變條只沒結解惇問意建月公無系軍很情者最立代想已通并提直題黨程展五果料象員革位入常文總次品式活設及管特件長求老頭基資邊流路級少圖山統接知較長將組見計別她手角期根論運農指幾九區強放決西被干做必戰先回則任取據處隊南給色光門即保治北造百規熱領七海地口東導器壓志世金增爭濟階油思術極交受聯什認六共權收證改清已美再采轉更單風切打白教速花帶安場身車例真務具萬每目至達走積示議聲報斗完類八離華名確才科張信馬節話米整空元況今集溫傳土許步群廣石記需段研界拉林律叫且瞭究觀越織裝影算瞭低持音眾書布復容兒須際商非驗連斷深難近礦千周委素技備半辦青省列習響約支般史感勞便團往酸歷市克何除消構府稱太準精值號率族維劃選標寫存候毛親快效斯院查江型眼王按格養易置派層片始卻專狀育廠京識適屬圓包火住調滿縣局照參紅細引聽該鐵價嚴首瞭底液官德調隨病蘇失爾死講配女黃推顯談罪神藝呢席含企望密批營項防舉球英氧勢告李臺落木幫輪破亞師圍注遠字材排供河態封另施減樹溶怎止案言士均武固葉魚波視僅費緊愛左章早朝害續輕服試食充兵源判護司足某練差致板田降黑犯負擊范繼興似余堅曲輸修的惇故城夫夠送筆船占右財吃富春職覺漢畫功巴跟雖雜飛檢吸助升陽互初創抗考投壞策古徑換未跑留鋼曾端責站簡述錢副盡帝射草沖承獨令限阿宣環雙請超微讓控州良軸找否紀益依優頂礎載倒房突坐粉敵略客袁冷勝絕析塊劑測絲協重訴念陳仍羅鹽友洋錯苦夜刑移頻逐靠混母短皮終聚汽村云哪既距衛停―烈央察燒行迅境若印洲刻括激孔搞甚室待核校散侵吧甲游久菜味舊模湖貨損預阻毫普穩乙媽植息擴銀語揮酒守拿序紙醫缺雨嗎針劉啊急唱誤訓愿審附獲茶鮮糧斤瞭孩脫硫肥善龍演父漸血歡械掌歌沙著剛攻謂盾討晚粒亂燃矛乎殺藥寧魯貴鐘煤讀班伯香介迫句豐培握蘭擔弦蛋沉假穿執答樂誰順煙縮征臉喜松腳困異瞭免背星福買染井概慢怕磁倍祖皇促靜補評―翻肉踐尼衣寬揚棉希傷操垂秋宜氫套筆督振架亮末憲慶編牛觸映雷銷詩座居抓裂胞呼娘景威綠晶厚盟衡雞孫延危膠還屋鄉臨陸顧掉呀燈歲措束耐劇玉趙跳哥季課凱胡額款紹卷齊瞭偉蒸殖永宗苗川爐巖弱零楊奏沿露桿探滑鎮飯濃航懷趕庫奪伊靈稅了途滅賽歸召鼓播盤裁險康唯錄菌純借糖蓋橫符私努堂域槍潤幅哈竟熟蟲澤腦壤碳歐遍側寨敢徹慮斜薄庭都納彈飼伸折麥濕暗荷瓦塞床筑惡戶訪塔奇透梁刀旋跡卡氯遇份毒泥退洗擺灰彩賣耗夏擇忙銅獻硬予繁圈雪函亦抽篇陣陰丁尺追堆雄迎泛爸樓避謀噸野豬旗累偏典館索秦脂潮爺豆忽托瞭驚塑遺愈朱替纖粗傾尚痛楚謝奮購磨君池旁碎骨監捕弟暴割貫殊釋詞亡壁頓寶午塵聞揭炮殘冬橋婦警綜招吳付浮遭徐您搖谷贊箱隔訂男吹樂園紛唐敗宋玻巨耕坦榮閉灣鍵凡駐鍋救恩剝凝堿齒截煉麻紡禁廢盛版緩凈睛昌婚涉筒嘴插岸朗莊瞭街藏姑貿腐奴啦慣乘伙恢勻紗扎辯耳彪臣億璃抵脈秀薩俄網舞店噴縱寸汗掛洪著賀閃柬爆烯津稻墻軟勇像滾厘蒙芳肯坡柱蕩腿儀旅尾軋冰貢登黎削鉆勒逃障氨郭峰幣港伏軌畝畢擦莫刺浪秘援株健售股島甘泡睡童鑄湯閥休匯舍牧繞炸哲磷績朋淡尖啟陷柴呈徒顏淚稍忘泵藍拖洞授鏡辛壯鋒貧虛彎摩泰幼廷尊窗綱弄隸疑氏宮姐震瑞怪尤琴循描膜違夾腰緣珠窮森枝竹溝催繩憶邦剩幸漿欄擁牙貯禮濾鈉紋彈罷拍咱喊袖埃勤罰焦潛伍墨欲縫姓刊飽仿獎鋁鬼瞭麗跨默挖鏈掃喝袋炭污幕諸弧勵梅奶潔災舟鑒苯訟抱毀率懂寒智埔寄屆躍渡挑丹艱貝碰拔爹戴碼夢芽熔赤漁哭敬顆奔藏鉛熟仲虎稀妹乏珍申桌遵允隆螺倉魏銳曉氮兼隱礙赫撥忠肅缸牽搶博巧殼兄杜訊惇誠碧祥柯頁巡矩悲灌齡倫票尋桂鋪圣恐恰鄭趣抬荒騰貼柔滴猛闊輛妻填撤儲簽鬧擾紫砂遞戲吊陶伐喂療瞭瓶婆撫臂摸忍蝦蠟鄰胸鞏擠偶棄槽勁乳鄧吉仁爛磚租烏艦伴瓜淺丙暫燥橡柳迷暖牌纖秧膽詳簧踏瓷譜呆賓糊洛輝憤競隙怒粘乃緒肩籍敏涂熙皆偵懸掘享糾醒狂鎖淀恨牲霸爬賞逆玩陵祝秒浙貌役彼悉鴨著趨鳳晨畜輩秩卵署梯炎灘棋驅篩峽冒啥壽譯浸泉帽遲硅疆貸漏稿冠嫩脅芯牢叛蝕奧鳴嶺羊憑串塘繪酵融盆錫廟籌凍輔攝襲筋拒瞭僚旱鉀鳥漆沈眉疏添棒穗硝韓逼扭僑涼挺碗栽炒杯患餾勸豪遼瞭勃鴻旦吏拜狗埋輪掩飲搬罵辭勾扣估蔣絨霧丈朵姆擬宇輯陜雕償蓄崇剪倡廳咬駛薯刷斥番賦奉佛澆漫曼扇鈣桃扶仔返瞭俗虧腔鞋棱覆框悄叔撞騙勘旺沸孤粘吐孟渠屈疾妙惜瞭仰狠脹諧拋霉桑崗嘛衰盜滲臟賴涌甜曹閱肌哩厲經緯毅昨偽癥煮嘆釘搭莖籠酷偷弓錐恒杰坑鼻翼綸敘獄逮罐絡棚抑膨蔬寺驟穆冶枯冊尸凸紳坯犧焰轟欣晉瘦御錠錦喪旬鍛壟搜佛撲邀亭酯邁舒脆酶閑憂酚頑羽漲卸仗陪薄辟懲杭姚肚捉飄漂昆欺吾郎烷汁呵飾蕭雅郵遷燕撒姻赴宴煩削債帳斑鈴旨醇董餅雛姿拌傅腹妥揉賢拆歪葡胺丟浩徽昂墊擋覽貪慰繳汪慌馮諾姜誼兇劣誣耀昏躺盈騎喬溪叢盧抹易悶咨刮駕纜悟摘餌擲頗幻柄惠慘佳仇臘窩滌劍瞧堡潑蔥罩霍撈胎蒼濱倆捅湘砍霞邵萄瘋淮遂熊糞烘宿檔戈駁嫂裕徙箭捐腸撐曬辨殿蓮攤攪醬屏疫哀蔡堵沫皺暢疊閣萊敲轄鉤痕壩巷餓禍丘玄溜曰邏彭嘗卿妨艇吞韋怨矮歇郊祿捻漠粹顛宏冤肪饑呵仙押挨醛娃拾沒佩勿嚇訛侯戀夕鋅篡戚淋蓬豈釉兆泊魂拘亡杠摧氟頌渾凌鈾誘犁譴頒舶扯嘉萌猶滋焊舌匹媳肺掠釀烹疲馳鴉窄辱狹樸遣菲奸韌辣拳桿臥醉竭茅墓矣哎艷敦輿締雇尿葬履契禽渣襯躲賠咸溉賊醋堤抖妃褲廉晴挽掀茫丑亥攔悠闡慧佐奇豎孝柜麟繡遙逝愁肖昭芬逢窯捷圜盲閘宙輻披賬狼幽綢蜂慎餐酬誓惟叉彌址幟芝砌唉仆濤臭瞭翠盒劫慨炳闔寂椒倘拓畏喉巾頸墾拚獸蔽蘆乾爽竊譚掙崩模褐傳翅儒傘晃謬胚剖湊眠濁霜礁蔑抄闖灑碑蓉耶猜蹲壺喚澳鋸郡玲綿紐梳掏吁錘鼠穴椅殷遮吵萍厭畜俱夸呂囊捧雌閩饒瞬郁哨鑿朝俺滸茂肝勛盯籽恥菊濫稼戒奈帥鞭蠶鎂詢跌烤壇宅笛鄂蠻顫棍睜鼎岌降侍藩嚷匪岳糟纏迪泄卑氛堪蘿盛碘縛悅澄甫攀屠溢拱晰攜朽吟菱謙凹俊芒盼嬸艘酰趁唇挫羞浴疼萎肴愚腫刨絞樞嫁慕艙鏟蘋豫諭迭潘頃翁榜匠欠茬疇胃沾蹤弊哼鵬歧桐沃悼惑潰蔗薦潭孢露診庸聰嫌廚龐祁鉗肆梭贈崖籃穎甸藻搗且撕詔貞賜慈炕胖茲差瓊銹汛卓棵饋撓灶嬰蒂膚衫瀝侖勉滬逸蜜浦嗓暈膏祭贏艾扮鵝憐蒲兔孕聽孽挪淑謠懼廊緬俘驕膀陡宰誕峻惱腺獵渦夷愉魔銨葛賈似蔭喲脊鈔苛錳橢鑲杏溴倚滯會氓捏斬傲匆僵鹵燙衍榨攏裸屑咽坊舅渴翔邪拄窖貓砌欽媒脾勺柏柵噪晝耿扁辰秤得販糕梁曇衷宦扔哇詐囑藤卜岡悔廓皂拐氰杉瑪矢寓瓣罕垮筍淘銜稱恭喇帕桉秉簾銘蛇摔齋叭帆裸儉瘤篷砸肢辟脖瞪暑卜竿殲笙酮蘊嘩瞎喀刃楔喘枚嵌撾廂粵甩拴膝懇腕娓熄錨忌愧哦荊圃騷丸蒜毯弗俯鹿梢屯瞭衙轎賤壘諒踢啞滔渥餉泳棕熬擱腈梨吻櫻奠捆姨柏聘惕鄆綁冀裹酥寡彥稠啡鈍汝擅汰埔敞嘿遜棟謹咖鯉雀傭庵葫賄鱗拼搏謊塌仞膩戊怖墳禾剎嘻桔坎拇煽獅癢曾梗寇鷹燭哄莽雯胳龜亟糠泌坪傻什喻淵蚌跪巷涅釗譬蕊膛侮奕枕辮況扼郝寥凄廈腥鈞耦蹄戮屁誦匈樁釣涵倦袍抒嶼蹈忿敷虹聊嗣尉燦糙蹬嗯姬狡笨辜僧茨諷翰枉岐棗嶄焚咕猴攬澇耍趟洶咋傍鍍給爵虜劈璋踩瞅迄昔汞呱詭魄―祺嘲惶贓癌咐歉扳鄙廬聶便芡軀貶煌擰隋襄淤寵炊滇窖懶栓佑憾駱裙猖兜孵痼盥曝泣絮韻眷曠噢參棲盞鰲濺煎校榴暮琪淆陛巢噠吼槐唧其沛乞蜀蜇賺捍較冪堯咒耽叮褂煥煞雹搓釜鉻揀募淹瑰鏈茄灼鄒躬覺嬌焉彰鶴琳淪畔惹庶斃皖邢禹漬繃竄翹淫筆陌膊韃咳玫巫拂蕉瀾贖綏鋤囪賭頰縷寅躁稚庚荀氦魁珊蛻蛭酌逗閨蔓撇豌朕緝襟鎳桅熒侄卒佃瞿娶飪聳乍靶癡靖扛筐韶囂崔蓿岔氛娥剿霖喃搪雍裳撰豹駿慷

總結

以上是生活随笔為你收集整理的ArduinoIDE初步开发ESP8266时钟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。