物联网听上去是一个高大上的词儿, 还有什么大数据, 云, 智能制造等等, 今天我也往这方面稍微靠一靠, 这篇文章主要介绍的是通过 Wi-Fi 模块与传感器组合, 实现感应计数器, 应用场景主要如下:
1. 统计 SMT 机器过板数量.
2. 监测 SMT 机器是否停止运行.
3.AGV 障碍物感应预警.
在此之前我们需要准备必备的硬件, Wi-Fi 模块与传感器, 分别如下图所示:
传感器 + Wi-Fi
接线方式如下:
- 3V --> 3V/5V
- OUT-->15
- GND-->SND
开发工具为 Arduion 1.8.9, 打开工具之后我们开始编程, 主要代码如下:
- #include "SSD1306Wire.h" 这类似 C# 里面的引用
- #include <WiFiMulti.h>
- #include <HTTPClient.h>
- char* ssid = ""; // Wi-Fi 名称
- char* password = ""; // Wi-Fi 密码
- void loop(){
- display.clear();
- display.drawString(0, 16, Wi-Fi.localIP().toString()); // 显示 IP 地址
- display.display();
- delay(300);
- String url="http://192.168.1.166/api.ashx";
- HTTPClient http;
- http.begin(url);
- int httpCode = http.GET();
- if(httpCode> 0){
- Serial.println("Submitted");
- }
- if(httpCode==200){
- Serial.println("Result OK");
- }
- http.end();
- }
- void setup()
- {
- display.init();
- display.flipScreenVertically();
- display.setFont(ArialMT_Plain_16); // 设置字体
- display.clear();
- display.drawString(0, 0, id);
- display.drawString(0, 20, "...");
- display.display();
- while(WiFiMulti.run() != WL_CONNECTED) {
- delay(500);
- }
- Serial.begin(115200);
- delay(10);
- Serial.print(digitalRead(16));
- delay(5000);
- attachInterrupt(16, CountTimes, FALLING); // 触发条件
- }
API 代码比较简单, 一个写入数据一个读取数据:
- public string SaveData(System.web.HttpContext App)
- {
- System.Web.HttpRequest req = App.Request;
- var db = Entity.SqlDB.GetInstance("mts");
- int i = 0;
- Entity.WIFI_AUTO_COUNT wic = new Entity.WIFI_AUTO_COUNT();
- if (db.Queryable<Entity.WIFI_AUTO_COUNT>().Any())
- {
- DataTable dt = db.Queryable<Entity.WIFI_AUTO_COUNT>().ToDataTable();
- int curr_times = Convert.ToInt32(dt.Rows[0][0].ToString());
- wic.TIMES = (curr_times + 1).ToString();
- i = db.Updateable(wic)
- .UpdateColumns(it => new { it.TIMES })
- .Where(it => it.FID == "test_key")
- .ExecuteCommand();
- }
- else
- {
- wic.FID = "test_key";
- wic.TIMES = "1";
- i = db.Insertable(wic).ExecuteCommand();
- }
- MesLog.Logs.AddHourLog(req.Url.ToString());
- return "ok";
- }
- public string GetData(System.Web.HttpContext App)
- {
- System.Web.HttpRequest req = App.Request;
- var db = Entity.SqlDB.GetInstance("mts");
- var JSON = db.Queryable<Entity.WIFI_AUTO_COUNT>().Select(it => new { Times = it.TIMES }).ToJson();
- if (req["callback"] != null)
- {
- return req["callback"].Trim() + "([" + JSON + "])";// 支持 JSONP
- }
- return JSON;
- }
Wi-Fi 连接这一部分可以选择固定 IP 地址以及网关, 也可以采用自动获取, API 需要根据实际需求来编写, 接收客户端的调用.
将资料写入至模块以后, 我们可以通过 Arduion 里面的工具 -->Serial Monitor 将调试信息输出来, 看看是否正确, 最终的效果如下图所示:
我也顺应潮流, 开通了微信公众号, 后续会将博客园的文章同步至公众号!
关注以下公众号, 您将获得更多资讯!
如果您觉得该文章对您有帮助, 请帮忙点个赞, 感谢!!
来源: https://www.cnblogs.com/allen0118/p/11051689.html