主程序user_init()部分代码如下:
void user_init()
{
uart_init(BIT_RATE_115200,BIT_RATE_115200);
//串口初始化
user_set_station_config();
//esp8266 WiFi信息配置
}
void user_set_station_config()
{
struct station_config stationconfig;
os_memset(&stationconfig.ssid, 0, 32);
os_memset(&stationconfig.password, 0, 64);
os_memcpy(&stationconfig.ssid, "WIFINAME", 8); //设定连接的WiFi
os_memcpy(&stationconfig.password, "passward.", 8); //WiFi密码
stationconfig.bssid_set=0;
wifi_station_set_config(&stationconfig);
os_timer_disarm(&test_timer);
os_timer_setfn(&test_timer,(os_timer_func_t*)user_check_ip, NULL);
os_timer_arm(&test_timer, 2000, 1);
}
最后配置TCP客户端信息,这里需要注意连接TCP服务器时必须确保WiFi已成功连接,因此设定了一个定时器test_timer,该定时器的作用是通过WiFi状态接口函数wifi_station_get_connect_status()循环检测WiFi是否连接成功,当WiFi连接成功后配置TCP客户端信息。下面为建立TCP连接的程序:
user_check_ip()
{
tcpclient.type=ESPCONN_TCP;//tcp连接方式
tcpclient.state = ESPCONN_NONE;
tcp_server_ip.addr = 0;
const char esp_server_ip[4] = {x,x,x,x};
os_memcpy(tcpclient.proto.tcp->remote_ip, esp_server_ip, 4);//远程IP设定
tcpclient.proto.tcp->remote_port = 8888; // 远程端口设定
tcpclient.proto.tcp->local_port = espconn_port(); //本地端口设定
espconn_connect(&tcpclient);//连接tcp 服务器
}
remote_ip可以选择自动分配或固定IP,远程端口remote_port根据上位机选择,通常选择比较大的,小的端口通常被上位机一些系统服务占据。
采集方案:针对实时更新数据:比如瞬时电压、电流、功率。由ESP8266向电能表循环发送N条报文,电能表响应每一条报文,ESP8066解析N条报文,得到数据存入自身内存。上位机向ESP8266循环下发N条查询报文,ESP8266取出内存中的数据回复上位机。
树莓派上在有基础系统的情况下
cd ~git clone https://github.com/MGod-monkey/Raspberry_Ups.gitcd raspberry_ups/Software/
将库克隆下来并且安装
sudo chmod +x install.shsudo ./install.sh
sudo systemctl status ups.service
复制配置文件到node-red,并且安装node-red控制台
cp ups_flow.json ~/.node-red/lib/flows/ups_flow.json
cd ~/.node-red/
npm i node-red-dashboard
启动node-red服务,直接启动或者设置开机自启
sudo node-red
sudo systemctl enable nodered.service
sudo systemctl start nodered.service
树莓派端控制台显示如图: