37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十五:ESP8266机智云开发板 ESP12F wifi模块(支持云端的智能硬件开发套件)
知识点:机智云 (www.gizwits.com)
机智云是亚洲最大的智能硬件自助开发和云服务平台,产品及服务涵盖终端管理、连接管理、应用支持和业务分析等主要功能,为有志于进军物联网的开发者提供智能硬件一站式开发工具及云端运维服务,提供 IoT 开源嵌入式代码库、云端 API 接口、APP 端 SDK,方便开发者进行二次开发,同时支持公有云、私有云、混合云以及全球化部署,是目前 IoT 技术最成熟、云端应用功能最完善、全球量产客户最多、最受 IoT 开发者喜爱的量产级别智能硬件开发及云服务平台,被业界及媒体公认为物联网第三方云服务第一品牌。
ESP8266机智云开发板模块
(官方简介)这是一个支持云端的智能硬件开发套件,史上最简单最具性价比的物联网开发板,不需要你懂网络、TCP/IP、HTP、MQTT底层复杂的知识,只要你会C语音,即可用安信可的机智云SDK快速实现二次开发,这个DEMO板可以用手机流量控制板载的RGB七彩灯,手机端APP,可以通过光敏电阻显示环境亮度。代码只要少作修改半个小时即可做出一款属于你自己的远程控制设备,系统免费生成APP(安卓、IOS),开放SDK,你只需要做下APP端UI界面即可研发成一个成品。
ESP8266
1、低功耗、高集成度的 Wi-Fi 芯片
2、仅需 7 个元器件
3、超宽工作温度范围:-40°C 至 +125°C
4、ESP8285 - ESP8266 内封 8 Mbit Flash
5、高度集成——ESP8266EX 是业内集成度最高的 Wi-Fi 芯片,最小封装尺寸仅为 5mm x 5mm。ESP8266EX 高度集成了天线开关、射频 balun、功率放大器、低噪放大器、过滤器和电源管理模块,仅需很少的电路,可将所占 PCB 空间降到最低。
6、32 位 Tensilica MCU——ESP8266EX 内置 Tensilica L10632 位微型控制器 (MCU),具有超低功耗和 16 位 RSIC,时钟速度最高可达 160 MHz。支持实时操作系统 (RTOS),目前 Wi-Fi 协议栈只用了 20% 的 MIPS,其他均可用于用户编程和开发。
7、低功耗——ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了最低功耗。ESP8266EX 有三种运行模式:激活模式、睡眠模式和深度睡眠模式,能够延长电池寿命。
8、性能稳定——ESP8266EX 集成了更多的元器件,性能稳定,易于制造,工作温度范围达到 -40°C 到 +125°C。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十五: ESP8266 Witty Cloud ESP-12F WiFi模块 Witty Cloud 机智云开发板 ESP Witty
项目四:扫描可用的 WiFi 网络
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
项目四:扫描可用的 WiFi 网络
*/
#include <ESP8266WiFi.h>
const int greenPin = 12;
void setup() {
Serial.begin(115200);
pinMode(greenPin, OUTPUT);
digitalWrite(greenPin, HIGH);
delay (6000);
digitalWrite(greenPin, LOW);
Serial.println(F("\nESP8266 WiFi 扫描"));
// 设置 WiFi 为站模式
WiFi.mode(WIFI_STA);
// 如果之前已连接,则断开与 AP 的连接
WiFi.disconnect();
delay(100);
}
void loop() {
String ssid;
int32_t rssi;
uint8_t encryptionType;
uint8_t* bssid;
int32_t channel;
bool hidden;
int scanResult;
Serial.println(F("正在开始WiFi扫描..."));
scanResult = WiFi.scanNetworks(/*async=*/false, /*hidden=*/true);
if (scanResult == 0) {
Serial.println(F("未找到网络"));
} else if (scanResult > 0) {
Serial.printf(PSTR("%d 个网络找到:\n"), scanResult);
// Print unsorted scan results
for (int8_t i = 0; i < scanResult; i++) {
WiFi.getNetworkInfo(i, ssid, encryptionType, rssi, bssid, channel, hidden);
Serial.printf(PSTR(" %02d: [CH %02d] [%02X:%02X:%02X:%02X:%02X:%02X] %ddBm %c %c %s\n"),
i,
channel,
bssid[0], bssid[1], bssid[2],
bssid[3], bssid[4], bssid[5],
rssi,
(encryptionType == ENC_TYPE_NONE) ? ' ' : '*',
hidden ? 'H' : 'V',
ssid.c_str());
delay(0);
}
} else {
Serial.printf(PSTR("WiFi 扫描错误 %d"), scanResult);
}
// 在再次扫描之前稍等片刻
delay(5000);
Serial.println(F(""));
}
项目四:扫描可用的 WiFi 网络
项目串口返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
项目五:扫描可用的 WiFi 网络之二,按钮输入用于启动扫描和板载 LED亮起以指示扫描何时进行
在每个回路上,还要检查连接到 LDR 的模拟输入并调整RGB 绿色 LED 的亮度以匹配测量的亮度。
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
项目五:扫描可用的 WiFi 网络之二,按钮输入用于启动扫描和板载 LED亮起以指示扫描何时进行
在每个回路上,还要检查连接到 LDR 的模拟输入并调整RGB 绿色 LED 的亮度以匹配测量的亮度。
*/
#include "ESP8266WiFi.h"
const int BUTTON_PIN = 4; // 定义按钮所连接的引脚
const int ON_BOARD_LED = 2; // 定义板载 LED 连接到的引脚
const int RGB_G_PIN = 12; // RGB 绿色 LED
const int LDR_PIN = A0; // 定义 LDR光敏电阻 连接的模拟引脚
//===============================================================================
// 初始化
//===============================================================================
void setup() {
pinMode(ON_BOARD_LED, OUTPUT); // 将 LED_BUILTIN 引脚初始化为输出
pinMode(BUTTON_PIN, INPUT_PULLUP); // 使用内置上拉初始化按钮引脚
digitalWrite(ON_BOARD_LED, HIGH); // 确保 LED 关闭
Serial.begin(115200); // 设置通信速率为 115200
// 将 WiFi 设置为站模式,如果之前已连接,则与 AP 断开连接
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("WiFi扫描 初始化完成");
}
//===============================================================================
// 主要程序
//===============================================================================
void loop() {
int btn_Status = HIGH;
int lightIntensity;
lightIntensity = analogRead(LDR_PIN); // 读取光照强度
analogWrite( RGB_G_PIN, map(lightIntensity, 40, 1023, 0, 1023));
btn_Status = digitalRead (BUTTON_PIN); // 检查按钮状态
if (btn_Status == LOW) { // 按钮按下,所以做点什么
Serial.print("光强度读数: ");
Serial.println(lightIntensity);
Serial.println("扫描开始......");
Serial.println("");
digitalWrite(ON_BOARD_LED, LOW); // 打开 LED
// 无线上网。扫描网络将返回找到的网络数量
int n = WiFi.scanNetworks();
Serial.println("扫描完成!");
Serial.println("");
if (n == 0)
Serial.println("没有找到网络");
else
{
Serial.print("找到网络=");
Serial.print(n);
Serial.println("个");
for (int i = 0; i < n; ++i)
{
// 为找到的每个网络打印 SSID 和 RSSI
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " : 不安全" : " : 加密");
delay(10);
}
}
Serial.println("");
digitalWrite(ON_BOARD_LED, HIGH); // 关闭 LED
}
}
项目五:扫描可用的 WiFi 网络之二,按钮输入用于启动扫描和板载 LED亮起以指示扫描何时进行
在每个回路上,还要检查连接到 LDR 的模拟输入并调整RGB 绿色 LED 的亮度以匹配测量的亮度。
项目串口返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
项目六:尝试连接WiFi 网络(绿灯亮)
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
项目六:尝试连接WiFi 网络(绿灯亮)
*/
#include <ESP8266WiFi.h>
const char* ssid = "zhz2";
const char* password = "12345678";
void setup() {
Serial.begin(115200);
delay(10);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(15, OUTPUT);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
digitalWrite(15, LOW);
// 我们将首先连接到 Wi-Fi 网络:
Serial.println();
Serial.println();
Serial.print("连接到 ");
Serial.println(ssid);
Serial.println("尝试连接WiFi 网络......");
WiFi.begin(ssid, password);
/*
我们等到状态指示ESP8266已连接到Wi-Fi网络,
此后,将显示Wi-Fi连接消息以及路由器分配给它的IP地址。
您的路由器需要具备DHCP功能并且已激活DHCP功能:
*/
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
Serial.println("");
}
Serial.println("Wi-Fi 已连接");
Serial.println("IP地址: ");
Serial.println(WiFi.localIP());
}
void loop() {
if (WiFi.status() == WL_CONNECTED)
digitalWrite(12, HIGH);//连接后绿灯亮
}
项目六:尝试连接WiFi 网络(绿灯亮)
项目串口返回情况
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百七十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
项目七:尝试连接多个WiFi 网络
- 在启动时快速连接到以前的 WiFi 网络
- 注册多个网络(至少 1 个)
- 以最强信号 (RSSI) 连接到 WiFi
- 当连接失败或丢失时回退以连接到下一个 WiFi
- 回退以连接到 WiFi 扫描未报告的隐藏 SSID
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百三十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
项目七:尝试连接多个WiFi 网络
- 在启动时快速连接到以前的 WiFi 网络
- 注册多个网络(至少 1 个)
- 以最强信号 (RSSI) 连接到 WiFi
- 当连接失败或丢失时回退以连接到下一个 WiFi
- 回退以连接到 WiFi 扫描未报告的隐藏 SSID
*/
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
// 每个 AP 的 WiFi 连接超时。连接时间较长时增加。
const uint32_t connectTimeoutMs = 5000;
void setup() {
// 不要在闪存中保存 WiFi 配置 - 可选
WiFi.persistent(false);
pinMode(12, OUTPUT);
pinMode(15, OUTPUT);
digitalWrite(12, LOW);
digitalWrite(15, LOW);
Serial.begin(115200);
Serial.println("\nESP8266 Multi WiFi example");
// 设置 WiFi 为站模式
WiFi.mode(WIFI_STA);
// 注册多个WiFi网络
wifiMulti.addAP("zhz", "12345678");
wifiMulti.addAP("zhz2", "12345678");
wifiMulti.addAP("zhz_5G", "12345678");
// 更多是可能的
}
void loop() {
// 保持WiFi连接
if (wifiMulti.run(connectTimeoutMs) == WL_CONNECTED) {
Serial.print("WiFi 已连接: ");
Serial.print(WiFi.SSID());
Serial.print(" ");
Serial.println(WiFi.localIP());
digitalWrite(12, HIGH);//连接后绿灯亮
} else {
Serial.println("WiFi未连接!");
digitalWrite(15, HIGH);//未连接红灯亮
}
delay(1000);
}
项目七:尝试连接多个WiFi 网络
- 在启动时快速连接到以前的 WiFi 网络
- 注册多个网络(至少 1 个)
- 以最强信号 (RSSI) 连接到 WiFi
- 当连接失败或丢失时回退以连接到下一个 WiFi
- 回退以连接到 WiFi 扫描未报告的隐藏 SSID
项目串口返回情况