一、硬件及其架构设计
1、MQTT三种身份
2、硬件架构设计
2.1、下位机
A、读码模块:读取条形码数据;
B、按键:区分出/入库操作,每扫一次码就按一次键;
C、OLED显示屏:下位机操作期间的信息提示;
D、Arduino:接受输入数据——条形码、按键,一要将数据发送给OLED显示屏显示,二要发送给WiFi模块,以保证网络传输的数据基础。
D、WiFi模块:ESP8266模块,接收来自Arduino的数据,整合成Json格式,作为MQTT发布者向服务器发送该Json数据。
2.2、上位机
A、MQTT服务器:接收发布者的信息,接收订阅者的订阅请求。
B、服务器后台程序:即MQTT订阅者程序,实现连接MQTT服务器;接入服务器数据库;订阅、取出信息,并根据信息具体数值采用SQL命令更新数据库。
二、实操步骤
1、单片机(Arduino NANO)
提示:程序中有些头文件,需要在Arduino IAE>>工具>>管理库中安装相应的库。
从上一张图可以看出,Arduino需要将接收到的条形码数据、按键数据发送到两个方向,一是OLED显示屏,二是WiFi模块。主要实现以下功能:
A、接收条形码数据;
B、接收按键数据;
C、发送给OLED显示屏进行显示;
D、发送给ESP8266模块。
具体代码如下:
#include<SoftwareSerial.h>
SoftwareSerial softSerial(11, 10);
#include <Arduino.h>
#include <Wire.h>
#include <MicroLCD.h>
LCD_SSD1306 lcd; /* for SSD1306 OLED module */
char a[100];
int num;
bool begin_flag = 0;
bool display_flag = 0;
#define key_add 12
#define key_reduce 5
void setup() {
Serial.begin(9600);
softSerial.begin(9600);
pinMode(key_add, INPUT_PULLUP);
pinMode(key_reduce, INPUT_PULLUP);
lcd.begin();
lcd.setCursor(0, 0);
lcd.setFontSize(FONT_SIZE_MEDIUM);
lcd.print("Waiting.......");
}
void loop() {
read_code();
key_down();
while (Serial.available()) {
Serial.read();
};
}
void read_code() {
while (softSeria