![e51c9d2a8556bd4aee4445aaa8b3c125.png](https://i-blog.csdnimg.cn/blog_migrate/cbb3b5104d5e468a3a49307ccca72797.png)
概述
远程无线开关是智能家居和物联网中重要的执行设备,它通过接入互联网来实现手机或WEB端、weixin小程序的远程开关控制,一般通过WIFI、GPRS、4G、NBIOT等来接入网络,网上卖的最多的应该WIFI版的。但作为创客的我们来说,买一个成熟的无线开关对我们来说是没什么乐趣的,我们要充分发挥创客的创造性和动手能力,去创造一款与众不同,私人定制版的无线开关。
今天要和大家分享的就是利用Arduino这个全球最大的开源硬件平台+国内使用最为广泛的STM32F系列微控制器,再加上SIM868 GPRS 2G无线通用模块,充分利用开源的代码库,再加入一些自己的编写的代码,1天就完成了这个产品的样机功能。实现了通过GPRS网络直接连到云端服务器,加了一个简单的数据库,就能实现用WEB端或weixin小程序来远程控制2路开关了,并且还具备GPS定位和LBS室内定位功能。
材料准备
要创造这个产品,你需要以下模块
STM32103CBT6双路继电器主板 1块
![a639d22b717e588b123a8d0dea851433.png](https://i-blog.csdnimg.cn/blog_migrate/f53125e5dba940beb9a8a9e5fe6cd856.jpeg)
SIM868 2G通讯模组 1块 (GPRS通讯、内置GPS,可室内LBS定位,板载陶瓷天线。)
![706f1e19a8af442df57fee72583fd98f.png](https://i-blog.csdnimg.cn/blog_migrate/6e2020d3befd6e85e06a01dbf3ec4a34.jpeg)
外壳 1个 (这个从网上购买的公壳,可以自己打印一个标签,印上自己的LOGO,给它取一个响亮的名字)
![218e88308b5fd5a655666758ebf7bf24.png](https://i-blog.csdnimg.cn/blog_migrate/56da7d4a73df4bdd017fc667097dbde3.jpeg)
这个开源项目所需的所有部件、材料,都放在了我们的创客taobao小店,搜索“兑悦物联小店”,可以找到它们了。也可以加入创客小伙伴们的家,大家一起交流,学习。我们的学习交流企鹅群:419411339。
实现的产品性能:
控制方式:WEB/微信小程序
通讯方式:GSM
定位功能:GPS/LBS
工作电压:DC24V/DC5V
电源输入接口:
接线端子DC24V
microUSB DC5V
负载电压:0~250VAC/0~30VDC
负载电流:10A MAX
控制路数:2路
接口模式:常开/常闭
产品尺寸:85X50X32mm
Arduino 编程
关于Arduino IDE编程平台的使用,网上用很多教程,还没用入门的童鞋可自行去学习。这里需要特别说明的一点是,Arduino IDE原生并不支持STM32系列的单片机,需要单独下载安装一个第三方的库来支持。关于怎么下载安装这个库,我们在另外的文章中来详细说明。
下面先无私的分享这个无线开关自己实现的那部分完整代码:
/**************************************************************
*
* This sketch connects to a website and downloads a page.
*
*
* TinyGSM Getting Started guide:
* https://github.com/ynkady/TinyGSM
*
**************************************************************/
/*
使用注意:
本程序使用SIM868 多功能GSM+GPS模块,使用前需注意以下事项:
1、此模块适用于兑悦物联小店的GSMandGPS_MDV1.2及以上版本的模块,其它SIM868模块需要对IO进行修改
https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-16679354584.19.5a9c5712xGAkkw&id=567100266868
2、本测试程序适用于Arduino UNO、Mega2560官方版本及其它国内各种改进版本,UNO板也可以参考本店的:
https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-16618966406.83.339d69c4yPsWMK&id=558178885996
3、使用本测度程序前需下载TinyGSM库,但原来官方的库里不支持基站定位,我们对这个库进行了更改,并上传到Githup,可从以下地址下载,并替换原来的库文件
https://github.com/ynkady/TinyGSM
Windows的Arduino库文件地址:C:UserskadyDocumentsArduinolibraries
4、GSM模块硬件连接
4V---->外部电源供电+(3.4~4.2V,推荐4.0V)
GND--->外部电源-
GND--->Arduino UNO GND
PWRKEY-----> D4
RX---------> D3
TX---------> D2
特别注意:由于GSM模块要搜索移动网络时瞬间电流非常大,可能达到2A,所以GSM模块不能使用ARDUINO开发板上的电源供电,需要使用外部稳定的电源供电,或使用容量大于1500mAh以上的锂电池供电
GSM模块共电模块可以从我们的小店找到:
https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-16618966406.41.339d69c4yPsWMK&id=554761942043
*/
// Select your modem:
#define TINY_GSM_MODEM_SIM800
// #define TINY_GSM_MODEM_SIM900
// #define TINY_GSM_MODEM_A6
// #define TINY_GSM_MODEM_A7
// #define TINY_GSM_MODEM_M590
// #define TINY_GSM_MODEM_ESP8266
#include <TinyGsmClient.h>
#include <Arduino_JSON.h>
#include <RTClock.h>
#include "User_Clock.h"
// Your GPRS credentials
// Leave empty, if missing user or pass
//普通GSM 2G网络接入点APN为CMNET
//物联网专用接入点APN为CMIOT
const char apn[] = "CMIOT";
const char user[] = "";
const char pass[] = "";
//Selset Dev Board Type
#define UNO 1
#define MEGA2560 2
#define BOARD_TYPE STM32
// Use Hardware Serial on Mega, Leonardo, Micro
#if BOARD_TYPE == MEGA2560
#define SerialAT Serial3
#define GPRS_PWRKEY_PIN 4
#elif BOARD_TYPE == UNO
#define U_RX 2
#define U_TX 3
#define GPRS_PWRKEY_PIN