附:http://www.jh-tec.cn/archives/7156
系统功能设计
本系统由STM32F103C8T6单片机、称重传感器、WIFI模块及电源组成。
1、手机APP和stm32设备上WIFI模块进行连接。
2、通过称重传感器采集到的重量,然后将采集到的数据通过wifi发送给手机。
3、手机定制app接收到数据,进行处理显示,可对当前实物种类及实物情况选择设置。
4、app同时能够显示当前物体重量,能产生的热量值以及卡路里值进行显示。
2、ESP8266WIFI模块电路设计电路设计
ESP8266是一款超低功耗的UART-WiFi 透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网通信,实现联网功能。
ESP8266封装方式多样,天线可支持板载PCB天线,IPEX接口和邮票孔接口三种形式;
ESP8266可广泛应用于智能电网、智能交通、智能家具、手持设备、工业控制等领域。
一、模块特点
(1)支持无线802.11 b/g/n 标准
(2)支持STA/AP/STA+AP 三种工作模式
(3)内置TCP/IP协议栈,支持多路TCP Client连接
(4)支持丰富的Socket AT指令
(5)支持UART/GPIO数据通信接口
(6)支持Smart Link 智能联网功能
(7)支持远程固件升级(OTA)
(8)内置32位MCU,可兼作应用处理器
(9)超低能耗,适合电池供电应用
(10)3.3V 单电源供电
功能底板:
STM32F103C8T6单片机核心板:
USB供电接口,复位按键 开关按键
合理优秀的布局布线:
参考代码:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include <stdio.h>
#include "timer.h"
#include "key.h"
unsigned long Weight_Maopi = 0;//毛坯重量
long Weight_Shiwu=0;//总重量
char dis1[16]; //显示数组
unsigned char numFlag =0; //计数标志
unsigned char readWeight =1;//读取重量
unsigned char i ;
u8 sendDataFlag =0;//发送数据标志
u8 MesCount =0;//信息发送计数
unsigned long HX711_Read(void);//读取重量函数
int main(void)
{
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为115200
uart2_init(9600) ;
TIM3_Int_Init(499,7199);//50ms
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init();
for(i=0;i<40;i++)
{delay_ms(100);}
printf("AT+CIPMUX=1\r\n"); //建立多连接
for(i=0;i<10;i++)
{delay_ms(100);}
printf("AT+CIPSERVR=1,8080\r\n"); //创建端口号 //**All notes can be deleted and modified**//
Weight_Maopi = HX711_Read(); // 读取毛重值
delay_ms(100);
Weight_Maopi = HX711_Read(); // 读取毛重值
delay_ms(100);
Weight_Maopi = HX711_Read(); // 读取毛重值
while(1)
{
if(readWeight == 1)
{
Weight_Shiwu=HX711_Read(); // 读取实际重量
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取净重
if(Weight_Shiwu > 0) //实际重量处理
{
Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/430); //计算实物的实际重量
}
if(Weight_Shiwu<8) //过滤
{Weight_Shiwu=0;}
readWeight = 0;
}
if(sendDataFlag == 1) //发送标志置位
{
if(MesCount == 0)//发送计数
{
MesCount =1;
printf("AT+CIPSEND=0,7\r\n"); //发送5字节数据
}
else
{
sprintf(dis1,"*%4d#\n",(unsigned int)Weight_Shiwu);//打印数据
UART_SendStr(USART1 , dis1 , 7);//打印wifi 数据 经度
MesCount = 0; //发送
}
sendDataFlag = 0; //发送数据清零
}
}
}
unsigned long HX711_Read(void) //增益128
{
unsigned int later;
unsigned long count;
unsigned char i;
//**All notes can be deleted and modified**//
count=0;
later=0;
while((HX711_DOUT==1)&&(later<1000))//延时防止死循环
{
later++;
delay_us(10);//短暂延时
}
for(i=0;i<24;i++)//读取数据
{
// delay_us(1);
HX711_SCK=1; //时钟位值高电平
count=count<<1;
// delay_us(1);
HX711_SCK=0; //时钟位值低电平
// delay_us(1);
if(HX711_DOUT)//读取数据位
count++;
}
HX711_SCK=1;
count=count^0x800000;//第25个脉冲下降沿来时,转换数据
delay_us(5);
HX711_SCK=0;
return(count);
}