feat: 全量同步 254 个常用的 Arduino 扩展库文件
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
#ifndef WIFIESPNOW_BROADCAST_H
|
||||
#define WIFIESPNOW_BROADCAST_H
|
||||
|
||||
#include "WifiEspNow.h"
|
||||
|
||||
#include <WString.h>
|
||||
|
||||
class WifiEspNowBroadcastClass
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief Initialize ESP-NOW with pseudo broadcast.
|
||||
* @param ssid AP SSID to announce and find peers.
|
||||
* @param channel AP channel, used if there is no STA connection.
|
||||
* @param scanFreq how often to scan for peers (milliseconds).
|
||||
* @return whether success.
|
||||
*/
|
||||
bool
|
||||
begin(const char* ssid, int channel = 1, int scanFreq = 15000);
|
||||
|
||||
/** @brief Stop ESP-NOW. */
|
||||
void
|
||||
end();
|
||||
|
||||
/**
|
||||
* @brief Refresh peers if scanning is due.
|
||||
*
|
||||
* This should be invoked in Arduino sketch @c loop() function.
|
||||
*/
|
||||
void
|
||||
loop();
|
||||
|
||||
/**
|
||||
* @brief Set encryption keys.
|
||||
* @param primary primary key, also known as KOK or PMK.
|
||||
* @param peer peer key, also known as LMK; nullptr to disable encryption.
|
||||
* The same peer key is applied to every discovered peer.
|
||||
* @return whether success.
|
||||
*/
|
||||
bool
|
||||
setKey(const uint8_t primary[WIFIESPNOW_KEYLEN], const uint8_t peer[WIFIESPNOW_KEYLEN] = nullptr);
|
||||
|
||||
/**
|
||||
* @brief Set receive callback.
|
||||
* @param cb the callback.
|
||||
* @param arg an arbitrary argument passed to the callback.
|
||||
* @note Only one callback is allowed; this replaces any previous callback.
|
||||
*/
|
||||
void
|
||||
onReceive(WifiEspNowClass::RxCallback cb, void* arg)
|
||||
{
|
||||
WifiEspNow.onReceive(cb, arg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Broadcast a message.
|
||||
* @param buf payload.
|
||||
* @param count payload size, must not exceed @c WIFIESPNOW_MAXMSGLEN .
|
||||
* @return whether success (message queued for transmission).
|
||||
*/
|
||||
bool
|
||||
send(const uint8_t* buf, size_t count)
|
||||
{
|
||||
return WifiEspNow.send(nullptr, buf, count);
|
||||
}
|
||||
|
||||
private:
|
||||
void
|
||||
scan();
|
||||
|
||||
#if defined(ARDUINO_ARCH_ESP8266)
|
||||
static void
|
||||
processScan(void* result, int status);
|
||||
|
||||
void
|
||||
processScan2(void* result, int status);
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
void
|
||||
processScan();
|
||||
#endif
|
||||
|
||||
private:
|
||||
String m_ssid;
|
||||
uint8_t m_peerKey[WIFIESPNOW_KEYLEN];
|
||||
int m_scanFreq = 0;
|
||||
unsigned long m_nextScan = 0;
|
||||
bool m_isScanning = false;
|
||||
bool m_hasPeerKey = false;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief ESP-NOW pseudo broadcast.
|
||||
*
|
||||
* In pseudo broadcast mode, every node announces itself as a group member by advertising a
|
||||
* certain AP SSID. A node periodically scans other BSSIDs announcing the same SSID, and adds
|
||||
* them as ESP-NOW peers. Messages are sent to all known peers.
|
||||
*
|
||||
* Pseudo broadcast does not depend on ESP-NOW API to support broadcast.
|
||||
*/
|
||||
extern WifiEspNowBroadcastClass WifiEspNowBroadcast;
|
||||
|
||||
#endif // WIFIESPNOW_BROADCAST_H
|
||||
Reference in New Issue
Block a user