1. 程式人生 > >Esp8266進階之路17 esp8266自研的快速上電開關五次 (開-關為一次) ,無需按鍵觸發則8266進去一鍵配網模式。(附帶Demo)

Esp8266進階之路17 esp8266自研的快速上電開關五次 (開-關為一次) ,無需按鍵觸發則8266進去一鍵配網模式。(附帶Demo)

  • 本系列部落格學習由非官方人員 半顆心臟 潛心所力所寫,僅僅做個人技術交流分享,不做任何商業用途。如有不對之處,請留言,本人及時更改。
  • 很多人怎麼聯絡我一起學習進步,下面打個小小公告:

一、前言。

  • 8266的全部教程也學的差不多了,準備往ESP32搞了。在公司看到這樣的產品,“快速開關五次,燈光出現閃爍,則進去一鍵配網模式。”,雖然我個人不是公司的嵌入式開發,但是憑藉我這對8266嫻熟的技術,2個小時就搞出來了;

  • 這個開關五次進去配網模式對於我們某些產品還是大有好處的 ,比如燈具… 我說的是天花板的燈具額~不用拿著梯子在燈具上面按鍵… 哈哈

二、實現的原理。

上個草圖。

這裡寫圖片描述

  • ①、上述的標誌位是儲存在flash中,是掉電不丟失的資料。聽說8266-12f或其他模組的外接flash模組都是25Qxx系列,可擦除次數有三萬次,甚至更多。所以這點擦除不算什麼的。

  • ②、每次模組上電後,標誌位+1,之後開啟定時器(自動過載),定時器任務有2個,首次執行時候將檢查該標誌位是否大於4,因為開關五次,這個標誌位就是加到了5,如果大於4就是要進去一鍵配網模式。同時進去一鍵配網後要把標誌位設定為0,否則下次檢查就是6了哦!!

  • ③、如果定時器任務首次檢查的標誌位不是大於4而且三秒後還沒掉電,那麼就是正常的上電,那麼我們也要把標誌位設定為0,因為這樣也就下次上電後不可能是大於4的。

這裡寫圖片描述

三、程式碼。(注意儲存的數要四位元組對齊!)

  • ①、設定標誌位。形參:true設定標誌位為0,false設定在原來的數值加一。
LOCAL void ICACHE_FLASH_ATTR setTurnOnOffFlag(bool isReset) {

	if (!isReset) {
		//先讀出來再加一
		u8 saveNumber[4];
		spi_flash_read(550 * 4096 + 20, (uint32 *) &saveNumber, 4);
		if (saveNumber[0] > 8 || saveNumber[0] < 0) {
			saveNumber[0] = 1;
		} else {
			saveNumber[0]++;
		}
		//先擦除再儲存
		spi_flash_erase_sector(550);
		spi_flash_write(550 * 4096 + 20, (uint32 *) &saveNumber, 4);
	} else {
		u8 saveNumber[4];
		saveNumber[0] = 0;
		//先擦除再儲存
		spi_flash_erase_sector(550);
		spi_flash_write(550 * 4096 + 20, (uint32 *) &saveNumber, 4);
	}
}
  • ②、查詢標誌位。返回值就是標誌位。
LOCAL u8 ICACHE_FLASH_ATTR getTurnOnOffFlag() {
	u8 tempSaveData[4];
	spi_flash_read(550 * 4096 + 20, (uint32 *) &tempSaveData, 4);
	os_printf("current save tempSaveData : %d \n:", tempSaveData[0]);
	//如果讀取失敗
	if (tempSaveData[0] == -1) {
		tempSaveData[0] = 1;
        spi_flash_erase_sector(550);
		spi_flash_write(550 * 4096 + 20, (uint32 *) &tempSaveData, 4);
	}
	return tempSaveData[0];
}
  • ③、程式入口;
void ICACHE_FLASH_ATTR user_init(void) {

	uart_init(57600, 57600);
	os_printf("SDK version:%s\n", system_get_sdk_version());
	
    //標誌位加一
	setTurnOnOffFlag(false);

	PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); //GPIO選擇
	GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0); //常亮
	
	/** 關閉該定時器 */
	os_timer_disarm(&os_timer);
	/** 配置該定時器回撥函式 */
	os_timer_setfn(&os_timer, (ETSTimerFunc *) (hw_test_timer_cb), NULL);
	/** 啟動該定時器 */
	os_timer_arm(&os_timer, 1000, true);

}

  • ④、定時器回撥函式;大家還可以在這裡做其他操作,比如是否獲取到了IP;
void hw_test_timer_cb(void) {

	static u8 statusFlag = 0;
	statusFlag++;
	if (statusFlag == 1) {
		u8 flag = getTurnOnOffFlag();
		os_printf("current save flag : %d \n:", flag);
		if (flag > 4) {
			//LED開始閃爍
			Led_Cmd();
			//儲存為0
			setTurnOnOffFlag(true);
			//進去一鍵配網模式
			smartconfig_set_type(SC_TYPE_ESPTOUCH);
			wifi_set_opmode(STATION_MODE);
			smartconfig_start(smartconfig_done);
			//關閉定時器
			os_timer_disarm(&os_timer);
		}
	} else if (statusFlag == 3) {
		setTurnOnOffFlag(true);
		//關閉定時器
		//os_timer_disarm(&os_timer);
	}

}

留念一下:

這裡寫圖片描述

相關推薦

Esp826617 esp8266快速開關 (-) 無需按鍵觸發8266進去模式附帶Demo

本系列部落格學習由非官方人員 半顆心臟 潛心所力所寫,僅僅做個人技術交流分享,不做任何商業用途。如有不對之處,請留言,本人及時更改。 很多人怎麼聯絡我一起學習進步,下面打個小小公告:

Esp8266 32【高階篇】當esp8266遇到 Html該怎麼內建網頁控制裝置理清內建網頁的實現過程實現無需路由器手機也可以控制esp8266附帶韌體

一、前言; 這個月也快結束了,時間真快,我伺服器知識自學依然在路途中,這幾天聽到熱點網頁配置esp8266連線路由器,那麼我想這個不是很複雜,不過需要一些通訊協議的基礎,以及對esp8266

Esp8266 26【高階篇】RTOS移植分析 MQTT 實現過程實現移植 MQTT協議在 esp8266 rtos實時系統可斷線重連附帶Demo

一、前言; esp8266的實時系統rtos是後面才出來支援的,其最後的呼叫也是呼叫樂鑫提供的API介面,所以,如果你已經玩轉了NONOS下的程式設計,那麼移植rtos程式碼是非常迅捷的,因為你已經對其的API介面非常熟悉,當然了

Android網路開發回顧旅 ① 在Android手機整合使用MQTT協議 實現搞掂移動控制硬體端附帶Demo

一、認識MQTT協議。 如果你對MQTT協議的連線過程不熟悉,那沒關係;請看我前面的8266硬體上介紹的MQTT介紹 ,其實也沒啥難,這個MQTT的好處是短小,資訊傳遞快捷 ,適合在

樂鑫Esp32學習旅⑦ esp32利用GPIO中斷做一個按鍵的短按和長按的回撥事件再也無須擔心觸發源附帶Demo

一. 前言; 說到按鍵的短按和長按,很多人都是直接用while(1)死迴圈不斷去讀取按鍵和消抖,通過讀取時間的間隔來確定是長按還是短按!這種方法比較常用,今天的話,小徐給大家帶來的是

樂鑫Esp32學習旅⑥ smartConfig和微信airKiss在esp32的實現輕鬆快捷連線路由器附帶Demo

本篇博文目錄: 一. 前言; 每一款嵌入式的WI-Fi晶片,配網功能都是必不可少的。樂鑫有smartConfig,在esp32上也不例外,但是官方已經提到支援了airKiss

Alios-Thins教程連載 ③ 圖文並茂教你使用樂鑫esp8266輕鬆連線阿里飛燕平臺實現輕鬆對接天貓精靈 (篇)附帶demo

本博文目錄: 一、 前言;      阿里巴巴出來的天貓精靈x1早已經出來一年多來了,今年還出來了方糖等智慧音箱,在去年時候,我還寫了esp8266如何直連阿里智慧平臺,那個是屬於直連模式;而這篇文章主要還是介紹如何介入阿里

從業程式設計生涯十年你要了解的程式設計師養生之道以及

作為一個從業快10年的程式設計師,我想給新入行的程式設計師們一些建議。這些建議是我希望自己可以在畢業時就讀到的,也希望它們可以幫助你成為一個更好的程式設計師。文末有資料分享。   簡單歸納一下,總共有7條: 保持健康 程式設計之外的愛好 持續學習 正確應對犯錯 不

Django 定義管理器

在 Test 模型中構造管理器子類, 並同步如下資料庫 from django.db import models class Test(model.Model): test_id =

定義註解介紹與實戰

在使用spring框架的時候,我們經常會感嘆註解式程式設計真是大大簡化了開發的時間,幾個小小的註解,就能解決一系列的配置問題,讓寫程式碼像寫詩一樣輕鬆明快。 我們都知道,在spring框架的前期,大多使用XML配置進行開發。XML配置起來有時候冗長,如實體類的對映,使用XML進行開發會顯得十分複雜。同時註解

CSS

模式 ant 表格 weight mil 比較 標題 根據 amp 下面主要引用http://www.cnblogs.com/wangfupeng1988/tag/css知多少/ CSS進階筆記: 一、學習CSS的三個突破點 1.瀏覽器如何加載和解析CSS——CSS的5個來

基礎篇 - 011 arduino api基礎手冊

異或 change 可用 算術運算符 chan 程序結構 換算 是否 關閉 arduino 函數 api 程序結構 在Arduino中, 標準的程序入口main函數在內部被定義, 用戶只需要關心以下兩個函數:void setup()void loop()setup() 函數

基礎篇 - 008 SPI數據傳輸(庫函數方法)

ria att clockd == bus 屏蔽 attach serial out 主機端: 1 /********************************* 2 代碼功能:SPI數據傳輸(主機端) 3 引腳說明: 4 SS/CS:片選(高電平屏

基礎篇 - 009 通過底層AVR方法實現SPI數據傳輸

lean oop and return false 進階 from setup pie 主機端: /********************************* 代碼功能:通過底層AVR方法實現SPI數據傳輸(主機端) 創作時間:2016*10*17 使用資源:

基礎篇 - 007 脈沖寬度測量

style 函數 long 最大 void serial 作者 println 電平 1 /********************************* 2 代碼功能:Pulse脈沖寬度測量 3 使用函數: 4 pulseIn(引腳號,脈沖響應電平,

中級篇 - 018 基於arduino的簡易版智能衣架

檢驗 dig cloc 布線 pin on() -- mage 根據 一. 設備及要求 目的:制作一個可以自動根據事實的天氣的狀況進行對衣架上的衣服進行晾曬。 基礎裝置:可伸縮的晾衣架。 開發環境:Arduino1. 8.1 主控板:Arduino UNO 動力裝置:

【SSH】Hibernate映射——一對一單向關聯映射

技術 iyu 標識 tails for sso 3.0 sdn 例如 【SSH進階之路】Hibernate基本原理(一) ,小編介紹了Hibernate的基本原理以及它的核心,採用對象化的思維操作關系型數據庫。 【SSH進階之路】Hibernate搭建開發環境+簡單實例

【SSH】Struts + Spring + Hibernate 開端

height 一段 ioc 效率 陽光大道 面向對象的思想 text ase 們的 Long Long ago。就聽說過SSH。起初還以為是一個東東,詳細內容更是不詳,總認為高端大氣上檔次,經過學習之後才發現,不不過高大上,更是低調奢華有內涵,經過一段時間的

2017PHP程序員的

通信協議 thinkphp nmp 圖形圖像 update gin io模型 應用場景 單例 又是一年畢業季,可能會有好多畢業生即將進入開發這個圈子,踏上碼農這個不歸路。根據這些年在開發圈子總結的LNMP程序猿發展軌跡,結合個人經驗體會,總結出很多程序員對未來的迷漫,特別對

樹莓派 (012) - 關於Raspberry Pi樹莓派無線卡配置

linu names interface 文件內容 動態ip down run 表示 無線網絡 Raspberry Pi樹莓派無線網卡配置[多重方法備選] 要想讓樹莓派方便操作,肯定需要配置無線網卡,這樣可以大大增強樹莓派的移動性和便利性,其實配置無線網卡基本就是和普通li