当前位置:网站首页>Esp8266 Smartconfig

Esp8266 Smartconfig

2022-06-11 09:37:00 Petit tigre IOT

1、WiFiMode de distribution

Internet des objetsWi-FiMode de distribution,Vous savez combien?-Alicloud Developer Community (aliyun.com)

Cet article présente et analyse plusieursWiFiMode de distribution,Je vous recommande,Le courant dominantWiFiLe réseau de distribution est équipé d'un réseau de distribution Hotspot、Réseau de distribution Bluetooth、Réseau de distribution à un bouton(SmartConfig);

  • Réseau de distribution des points chauds de l'équipement:Hotspots créés par les appareils connectés au téléphone,Pour avoir accès à InternetWiFiNom et mot de passe à l'appareil;
  • Réseau de distribution Bluetooth:Téléphone mobile avec appareil Bluetooth,Pour avoir accès à InternetWiFiNom et mot de passe à l'appareil;
  • Réseau de distribution à un bouton:Le téléphone est toujours connecté à InternetWiFi,DiffusionWiFiNom et mot de passe,L'appareil est allumésnifferMode d'écoute,Je l'ai.WiFiNom et mot de passe;

2、SmartConfigRéseau de distribution

  • Accès au matérielsnifferMode(Aussi connu sous le nom de mode hybride,C'est - à - dire ne pas filtrer les messages de données),Écoutez tous les802.11Message;
  • L'appareil doit être pris en charge dansCanal(En général1-13)Surveillance du scrutin(Parce que l'appareil ne connaît pas les canaux du téléphone de l'utilisateur et du routeur cible);
  • Capture conforme àMessage de données pour les règles du réseau de distributionArrêter le sondage du canal après,Essayez de recevoir tous les messages complets sur ce canal;
  • La réception actuelle du canal a échoué ou a expiré pour revenir à l'étape 2;
  • Fermeture lorsque la réception du message de données est terminée snifferMode,RetourstationMode Et commencer à essayer de se connecter au routeur , Le processus de distribution au sens étroit est terminé .

  


3、ESP8266DeSmartConfigInterface

ParamètresSmartConfigMode,OuvertSmartConfig, Fonction de rappel selon les différentes phases du réseau de distribution ,Puis ferméSmartConfig;

3.1、smartconfig_set_type 

Parce que c'est Wechat AirkissFonction,Alors choisissezSC_TYPE_AIRKISS;

ESPTOUCH C'est l'un des APP, Pour le réseau de distribution ,Pas ici.;

  

3.2、smartconfig_start 

Suivez les instructions ,Premier réglageSTA Le mode appelle à nouveau ceci API, Les paramètres de la fonction de rappel varient selon les phases du réseau de distribution ,Pour que ça marche.switch case Effectuer les opérations appropriées en fonction de l'état , Et officiellement API Il y a aussi des exemples de références sous le document ;

  

3.3、smartconfig_stop  

 FermerSmartConfigMode,Libérer la mémoire,ObtenirIPAppelé plus tard;


4、Code

C'est basé sur la dernière fois MQTT Changement de procédure , La fonction que je veux ajouter est ,FlashDansSSID Connexion au mot de passe APÉchec10Après,EntréeSmartConfigRéseau de distribution,Et après“Axenko Technology” Réseau de distribution sur le numéro public ,Et mettre le nouveauSSID Et mot de passe mis à jour à Flash, De cette façon, le réseau de distribution n'est pas nécessaire la prochaine fois que l'électricité est allumée ;Bien sûr.,Comme justeWiFi Déconnecter vous pouvez redémarrer sans réseau ( Si seulement on pouvait récupérer automatiquement ,Creuser un trou)


Réaliser les fonctions ci - dessusIl suffit de modifierwifi.cCode,Oui.wifi La fonction est ajoutée SmartConfigL'extension de,Fichier d'en - tête à inclure#include "smartconfig.h" ,Originalwifi_check_ip Le texte à ajouter est le suivant , Le réglage n'a pas été obtenu IP 10 Accès au réseau de distribution à un bouton après ;

// Fonction de synchronisation:VérifiezIPObtenir des informations
static void ICACHE_FLASH_ATTR wifi_check_ip(void *arg)
{
	static u8 fail_num = 0;

	// Non obtenuIPAdresse-------------------------------------------------------------
	else{
		fail_num++;
		if(fail_num >= 10){
			fail_num = 0;
			INFO("--------------START SmartConfig------------------\r\n");
			//wifi_set_opmode(STATION_MODE);		// Set toSTAMode
			smartconfig_set_type(SC_TYPE_AIRKISS); 	// ESP8266Mode de distribution【AIRKISS】
			smartconfig_start(smartconfig_done);	// Entrée【 Mode de distribution intelligent 】,Et définir la fonction de rappel
			return;
		}
	}
}

Et puisAjouterSmartConfigFonction de rappel pour, L'accent est mis sur la façon de mettre à jour SSIDEt mot de passeFlash,Et l'appeluser_main.cMoyenneWiFi Fonction de rappel après connexion ,Pour entrerSNTP、TCP、MQTTAttendez les prochaines étapes, N'oubliez pas de redémarrer le minuteur , N'oubliez pas de mettre par défaut SSID Message corrigé ;

// SmartConfigLorsque l'état change, Entrez cette fonction de rappel 
// Paramètres1:sc_status status / Paramètres2:Pointeur sans type【Dans différents états,[void *pdata] Les paramètres entrants sont différents pour 】
void ICACHE_FLASH_ATTR smartconfig_done(sc_status status, void *pdata)
{
    switch(status)
    {
    	// CmartConfigAttendez.
        case SC_STATUS_WAIT:
            os_printf("\r\nSC_STATUS_WAIT\r\n");
            break;

        // Découverte【WIFISignal】(8266 Attendre le réseau de distribution dans cet état )
        case SC_STATUS_FIND_CHANNEL:
            os_printf("\r\nSC_STATUS_FIND_CHANNEL\r\n");
    		os_printf("\r\n---- Please Use WeChat to SmartConfig ------\r\n\r\n");
    		break;

        // Obtenir【SSID】【PSWD】(8266 Récupération et décryptage 【SSID+PSWD】)
        case SC_STATUS_GETTING_SSID_PSWD:
            os_printf("\r\nSC_STATUS_GETTING_SSID_PSWD\r\n");
            // Mode de distribution
			sc_type *type = pdata;
            if (*type == SC_TYPE_ESPTOUCH){
            	os_printf("\r\nSC_TYPE:SC_TYPE_ESPTOUCH\r\n");
            }else{
            	os_printf("\r\nSC_TYPE:SC_TYPE_AIRKISS\r\n");
            }
            break;

        // Obtenu avec succès【SSID】【PSWD】,EnregistrerSTAParamètres,Et connectéWIFI
        case SC_STATUS_LINK:
            os_printf("\r\nSC_STATUS_LINK\r\n");
            struct station_config *sta_conf = pdata;	            // Accès【STAParamètres】Pointeur
            // Oui.【SSID】【PASS】Enregistrer à【ExtérieurFlash】Moyenne
    		os_strncpy(sysCfg.sta_ssid, sta_conf->ssid, 32);		// 【STA_SSID】WIFINom
    		os_strncpy(sysCfg.sta_pwd, sta_conf->password, 64);		// 【STA_PASS】WIFIMot de passe
    		CFG_Save();												//  Graver les paramètres du système mis à jour dans FlashMoyenne
			//ConnexionWiFi
            wifi_station_set_config(sta_conf);			// ParamètresSTAParamètres【Flash】
	        wifi_station_disconnect();					// DéconnecterSTAConnexion
	        wifi_station_connect();						// ESP8266ConnexionWIFI
	    	break;

        // ESP8266En tant queSTA,Connexion réussie àWIFI
        case SC_STATUS_LINK_OVER:
            os_printf("\r\nSC_STATUS_LINK_OVER\r\n");
            smartconfig_stop();			// Arrêtez!SmartConfig,Libérer la mémoire
			if(wifiCb){					// Pour déterminer si[wifiConnectCb]Fonctions
				wifiStatus = wifi_station_get_connect_status();	//  Obtenir l'état d'accès 
				wifiCb(wifiStatus);		// wifiCb(wifiStatus)=wifiConnectCb(wifiStatus)
			}
			// Rallumez le minuteur-------------------------------------------------------
			os_timer_setfn(&WiFiLinker, (os_timer_func_t *)wifi_check_ip, NULL);
			os_timer_arm(&WiFiLinker, 1000, 0);		// 1sTiming

	    break;
    }
}
原网站

版权声明
本文为[Petit tigre IOT]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/162/202206110914309876.html