基于单片机的婴儿看护系统的设计

摘要

目前市场对于婴儿看护方面产品是比较缺失的,市场上大部分的婴儿看护产品功能单一,虽然也可以为看护人
带来方便,但是帮助十分有限。本文设计的婴儿看护系统以32单片机为核心控制器,检测系统将检测的数据传送给
核心控制器进行处理,从而实现更多功能,为婴儿看护开辟了一条新道路。
  本婴儿看护系统的设计包括了:按键系统、声音检测系统、音乐系统、显示系统、电机系统、WiFi系统、温湿
度检测系统、尿床检测系统。这些系统共同组成了多功能智能婴儿看护系统。
  本婴儿看护系统拥有众多功能如:婴儿摇篮功能;音乐播放功能;尿床检测功能;温湿度检测功能;婴儿哭声
检测功能;无线接收功能等。这些功能对于看护婴儿是非常方便的,而且对于婴儿看护更加全面安全,为婴儿看护
贡献了新的方法。
关键词 :婴儿看护系统、stm32单片机、 ESP-01WiFi接收器、步进电机

1绪论

1.1课题背景及意义
  随着当今社会科技的不断进步,所带来的就是我们的生活水平的提高,但是正因如此人们也变得越来越繁忙,
在工作上投入过多时间就会导致家庭方面的时间缺失,这影响着中国千千万万个家庭,特别是婴儿家庭。所以,很多婴儿家庭都想要更方便、安全、全面、更舒适的护理宝宝,这样看来设计出一个更加智能、更方便、功能更加完
善且安全的婴儿看护系统更加迫切。
  根据人口调查显示,我国六岁以下的婴幼儿大约有一亿三千万人,其中三岁以下的婴儿约占有七千万人,其中
城市地区婴儿也有一千万人之高。
  研究表明,中国每年新增约三千万到两千万个婴儿不等,中国人口将继续保持生育速度高峰,专家预计我国第
五次婴儿生育高峰将来临。
可是我国目前的学前教育却是相对缺失的:
  目前,中国的婴幼儿所接受的学龄前看护主要由托儿所等幼儿教育机构开展。儿童教育机构在婴儿护理方面经
验几乎没有,这就导致了对婴幼儿的护理非常困难,而且,在儿童教育机构中,护理设备落后、教育机制不完善,
这样看来几乎所有的婴儿教育机构都没有能力接收3岁以下的婴幼儿,没有办法满足0-3岁的城市婴幼儿的护理需
求,80%以上的婴幼儿只能在家进行护理。随着新生儿数量的持续增加,护理婴儿将面临更加困难的问题。
  在中国,我们传统的婴幼儿看护用品,比如婴儿床、摇篮,这些传统的看护用品功能单一,使用起来看护很不
方便,但是在过去的看护过程中,传统的看护用品也帮助了看护人更方便的照顾婴儿;此外,在市面上还有一些新
发明的婴儿看护用品:拥有部分功能的智能婴儿看护系统。但是因为其内部使用了比较落后性能不太优越的系统控
制芯片,所以他们不能实现更多更复杂的功能,并且他们实现的功能在护理婴儿时并不能提供太多的帮助。因此,
我们有必要设计一款功能更多带给看护者更多便利带给婴幼儿更加全面看护的婴儿看护系统。
1.2 国内外研究现状
  当前来看市场上并没有对与婴儿看护系统的统一定义,国内外的大多数婴儿看护系统都是在传统婴儿车上设计
出一些护理功能以方便护理婴儿。而且在我国,智能婴儿看护系统的研究起步比较晚,直到近几年才出现大量研
究,开始快速发展。而国外对于智能婴儿看护系统的研究虽然早于我国,但是发展远远不如我国,那么我国成为婴
儿看护系统的出口大国也就理所应当了。
  目前来看婴儿看护系统已经完全融入了我国婴儿家庭,普通的婴儿看护系统在大部分城市的婴儿家庭中已经超
过了百分之五十的使用率,甚至在一些大型城市中的使用率达到了百分之七十。根据数据分析可以得知,我国在看
护系统的市场需求至少可以达到每年一千两百万台,预计在未来几年的经济大开发里我国对于婴儿看护系统的需求
还会不断增长,这样看来婴儿看护系统的市场前景十分开阔。
  本文所设计的婴儿看护系统与普通摇篮相比拥有更多的功能,与此同时也更加安全,可以很好地为婴儿和他的
监护人提供极大的便利,让婴儿和监护人可以有足够的睡眠环境,睡眠问题不再成为婴儿的健康成长的烦恼,监护
人也可以正常工作和休息。随着社会经济的发展和文化的进步,越来越多的有婴儿的家庭需要一个智能婴儿看护系
统,这将反映其在未来的优越性。
  因为婴儿是一个具有较大定量基础的弱势群体,因此如何合理、科学地照顾婴儿也是一个值得进一步研究的问
题。在国内外市场,也有一些婴儿摇篮,但是这些摇篮功能少,不能达到智能,摆动范围尚未测试,市场上大多数
摇篮的摆动范围大小不同。主要依靠用户的主观感受来决定系统的运行,它们运行并不科学,所以没有得到广泛的
应用。这项工作将可编程控制器和传感器检测技术应用于婴儿护理系统,目前市场上没有类似产品设计。该设计由
32单片机构成,相对于当前简单的数字芯片处理方法更方便和快速、安全、稳定、低功耗,更适合婴儿的监测和护
理。婴儿一直是一个庞大的消费群体,具有很大的发展价值,本设计肯定会给婴儿家庭带来更多便利。
1.3 本章小结
  我国人口基数大,与此同时新生人口增加的速度也在逐年增长,所以婴儿的看护就显得十分重要,婴儿作为弱
势群体,看护时的安全是我们首先考虑的问题,所以本设计的婴儿看护系统一定是在保护婴儿安全的前提上更好的
去照顾婴儿,这样我们的产品在市场中也拥有一定的核心竞争力,未来市场对于婴儿看护系统的需求将会不断增
大,这样看来婴儿看护系统的市场前景十分开阔。

2系统的总体设计

2.1 总体方案
  本婴儿看护系统的设计主要由STM32单片机、OLED屏幕、DHT11温湿度检测传感器、声音传感器、雨滴传感器、
28byj-48 步进电机、按键系统和MP3模块等组成基本控制电路。再使用编程软件组成完整的婴儿看护系统。
最终,看护人可以通过看护系统外置按键或者使用手机应用程序来控制步进电机的晃动频率和时间从而控制摇篮;
也可以根据看护系统屏幕上显示的信息或者发送到手机应用上的信息,来了解婴儿看护系统的目前的状态。
  当婴儿尿床的时候,会激活雨滴传感器,雨滴传感器发送信号到单片机,然后传输信号在OLED屏幕上进行显示,同时点亮婴儿尿床的指示灯,来提醒看护人需要更换婴儿尿布。
  当婴儿哭闹的时候,声音传感器发出信号到系统,系统会自动启动步进电机启动摇篮,同时播放预存在MP3模块
内的音乐来安抚婴儿,向手机应用发送哭闹信号,来提醒看护人婴儿哭泣。哭声停止后一段时间将会自动停止步进
电机和MP3模块的播放。
2.1系统总体设计框架图
婴儿看护系统设计实物图
2.2 本章小结
  本文所设计的基于32单片机的婴儿看护系统,拥有哭泣检测功能,尿床检测功能,自动摇篮音乐播放功能,最
重要的是可以远程上传温湿度检测数据到手机应用并可以通过手机发出指令。可以为看护人以及婴儿带来极大的便
利,减轻看护者的压力,同时也减少了看护人看护婴儿时的疲惫感。当看护人不在婴儿身边时也可以监测到婴儿的
状态,同时具备摇床和音乐播放等功能,帮助人们看护婴儿,可以为城市中的婴儿看护提供更多的帮助。

3系统的硬件设计

3.1 按键系统的设计
  在本婴儿看护系统的设计中,本系统的按键系统使用了四个按键按钮,通过在系统的程序中扫描按键的状态信
息,操作单片机发送指令信号。
  系统的按键系统的第一个按钮的作用是用来调节摇篮摇晃的幅度和摇晃的时间;第二个按钮的作用是选择系统
工作模式;第三个按钮的作用是启动、停止步进电机;最后一个按键的作用是设置按钮。当使用者按下设置按钮之
后,在看护系统的屏幕上会提示用户进入系统设置模式,用户进入系统设置模式后,就可以根据设置步进电机的工
作时间来控制婴儿摇篮的摇晃时间,第一个按键和第二个按键分别代表时间加和时间减,使用他们就可以修改步进
电机的工作时间。按下启动/停止按键就会启动/停止步进电机。
按键系统设计电路图如图3.1所示:在这里插入图片描述

3.1按键系统设计电路图
3.2 温度系统的设计
  本文的婴儿看护系统的设计中,我们使用了DHT11温湿度传感器作为收集系统周边环境温湿度信息的传感器系
统,DHT11温湿度传感器具有体积小、消耗低、电压低和运行稳定等诸多优点。DHT11温湿度传感器会将收集到的系
统周边环境的数据通过单一总线的数据格式传输到单片机上,而后单片机会进行数据的处理,最后显示在看护系统
的显示器上。
  打开WiFi模式后,也可以将所手机并处理好的信息上传到手机应用。通知提醒看护人婴儿看护系统周围环境的
具体温湿度信息。
温湿度系统设计电路图如图3.2所示:
在这里插入图片描述

3.2温湿度系统设计电路图
3.3声音传感器系统的设计
  在本婴儿看护系统的设计中,我们使用了声音传感器作为婴儿哭闹检测的系统,声音传感器上有两个输出:模
拟量输出与数字量输出。把数字量输出接口接到单片机的PA1端口。当婴儿哭闹的声音在传感器上产生了大于传感器
上电位计预先设置的电压值的时候,就会发送信号来提醒看护人婴儿哭闹并同步启动步进电机及MP3模块播放音乐来
安抚婴儿。
  当婴儿哭闹的声音大,传感器的模拟量输出的电压值就会变小,在模拟输出电压对比电压比较器上电位器预先
设置的反向端电压更小时,声音传感器的数字量输出端就会输出低电平到单片机上,看护系统将通过STM32单片机
的 PA1端口读取传感器管脚输出的数字量输出电压,由此判断婴儿是否在哭闹。
声音传感器系统设计电路图如3.3图所示:在这里插入图片描述

3.3声音传感器系统设计电路图
3.4雨滴传感器系统的设计
  在本婴儿看护系统的设计中,我们使用了雨滴传感器作为系统的婴儿尿床检测系统,雨滴传感器有模拟量输出
和数字量输出两种输出。将模拟量输出连接到单片机的PA0端口。如果婴儿尿床的话,雨滴传感器的感应板会产生不
同的电压值,接触面婴儿尿液越多产生的电压也越小。在 STM32单片机内置的ADC通道读取 PA0所采集到的管脚电压
值,由此可以判断婴儿是否尿床。当管脚电压值低于设置的电压值,则通过其他模块传输信号,使看护人注意到婴
儿尿床。
3.5音乐系统的设计
  在本婴儿看护系统的设计中,我们采用 MP3模块作为音乐播放器系统,MP3模块附带功率放大器,可以读取储存
卡中的音乐,模块使用8欧0.5瓦的喇叭播放。把 MP3 模块的 IO1 接到单片机的PA5端口,当检测到单片机上的声音
传感器收到较大声音,就会通过 PA5向 MP3 模块的 IO1输出脉冲信号,收到脉冲信号后,,MP3模块开始音乐的播
放,经过一定时间后,婴儿停止哭泣,单片机的 PA5 管脚再次向 MP3模块的 IO1输出脉冲信号,模块收到信号后就
会停止播放。同时, MP3 模块的 BUSY引脚用于指示 MP3 模块的工作状态,当MP3模块正在播放,则BUSY引脚输出
高电平,当MP3模块停止工作,busy引脚输出低电平,链接busy引脚到单片机的PB9端口上,通过检测 PB9管脚的电
平高低状态,单片机就可以检测到 MP3模块的工作状态。

3.6显示系统的设计
  在本婴儿看护系统的设计中,我们使用了0.96英寸的oled屏幕作为系统的显示系统,将显示模块分别连接到单
片机的 PB6 和 PB7两个端口,该模块使用 IIC 与单片机进行信息通信交流, PB6 与 PB7 也是单片机的硬件IIC接
口,使用单片机的硬件IIC就可以将单片机采集到的温湿度数据以及需要显示的信息显示到屏幕,让看护人更加方便
了解看护系统以及周边环境的信息。
3.7电机系统的设计
  在本婴儿看护系统的设计中,我们使用28byj-48步进电机作为婴儿摇篮的电机系统,该模块作为婴儿摇篮的动
力源,更加便于看护系统进行控制。由于单片机的IO接口的负载驱动能力相对较弱,因此选择了ULN2003 作为电机
驱动芯片可以使用ULN2003驱动芯片来增大驱动电流以实现单片机控制步进电机的目的。将步进电机连接到单片机上
的PA8、PA9、 PA10 和 PA11 四个端口,通过单片机的计时器模块来控制这四个端口,以达到控制步进电机的频率
从而调整婴儿摇篮的晃动频率。
电机系统设计电路图如图3.6所示:在这里插入图片描述

3.6电机系统设计电路图
3.8WiFi系统的设计
  在本婴儿看护系统的设计中,我们使用 ESP-01WiFi收发器作为婴儿看护系统的WiFi模块,在将ESP-01WiFi收发
器连接到单片机以后,接收单片机发送的指令,或发送单片机处理的信息就可以实现看护人对婴儿看护系统的远程
操作控制并且了解婴儿看护系统的环境信息。Esp01WiFi收发器发送的信号范围可以达到30m,可以满足大部分需
求。首先使用手机端app发生信息信号指令给WiFi收发器,然后将数据传递到单片机上,单片机发生中断,然后对比
指令信号内容,并执行相应操作。或者将信号数据发送至手机端app。
WiFi系统的设计电路图如图3.7所示:在这里插入图片描述

3.7 WiFi系统的设计电路图
千万不要删除行尾的分节符,此行不会被打印。“结论”以前的所有正文内容都要编写在此行之前。

附录
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "bmp.h"
#include "key.h"
#include "dht11.h"
#include "usart.h" 
#include "timer.h"
#include "led.h"
#include "ds18b20.h"
#include "rtc.h" 
#include "usmart.h"
#define ADC1_DR_Address ((u32)0x4001244C)
vu16 ADC_ConvertedValue;
float AD_value;
void ADC_Configuration1(void)
{
11
ADC_InitTypeDef ADC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
DMA_DeInit(DMA1_Channel1);
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;
   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 1;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
   DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_Cmd(DMA1_Channel1, ENABLE);
   ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
   ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
   ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1, ADC_SampleTime_239Cycles5);
ADC_DMACmd(ADC1, ENABLE);
ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
int main(void)
{
u8 ccc=99;
u8 a;
u8 key=0;
u16 led0pwmval=0;
u8 dir=1;
u8 t=0;
12
short temperature;
u8 humidity;
delay_init(); //
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //NVICж2:2λ2λ LED_Init(); //LED
delay_ms(8000);
uart_init(9600);
OLED_Init(); //OLED
OLED_Clear();
KEY_Init();
TIM3_PWM_Init(899,0);
LED_Init();
usmart_dev.init(SystemCoreClock/1000000); //USMART
RTC_Init();
ADC_Configuration1();
TIM_SetCompare2(TIM3,1000);
OLED_ShowCHinese(0,0,0);
OLED_ShowCHinese(18,0,15);
OLED_ShowCHinese(36,0,16);
OLED_ShowCHinese(54,0,17);
OLED_ShowCHinese(110,0,6);
OLED_ShowCHinese(0,2,11);
OLED_ShowCHinese(18,2,12);
OLED_ShowCHinese(36,2,13);
OLED_ShowCHinese(54,2,14);
OLED_ShowCHinese(0,4,18);
OLED_ShowCHinese(18,4,19);
OLED_ShowCHinese(36,4,20);
OLED_ShowCHinese(54,4,21);
OLED_ShowCHinese(32,6,22);
OLED_ShowCHinese(60,6,23);
OLED_ShowCHinese(108,4,26);
while(DS18B20_Init())
{
delay_ms(200);
delay_ms(200);
delay_ms(200);
}
while(DHT11_Init())
{
delay_ms(200);
delay_ms(200);
}
while(1)
{
printf("%d",123);
if(t%10==0) //ÿ100ms
{
13
temperature=DS18B20_Get_Temp();
OLED_ShowNum(70,0,temperature/10,2,16); //¶
USART_SendData(USART1,ccc);
printf("%d",temperature);
if(temperature/10<23)
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
if(temperature/10>=30)
GPIO_SetBits(GPIOB,GPIO_Pin_7);
//
OLED_ShowString(85,0,".",16);
OLED_ShowNum(90,0,temperature%10,2,16);
}
delay_ms(10);
t++;
if(t==20)
{
t=0;
}
if(a!=calendar.sec)
{
a=calendar.sec;
LCD_ShowNum(60,130,calendar.w_year,4,16);
OLED_ShowNum(0,6,calendar.w_year,4,16);
OLED_ShowString(30,6,".",16);
LCD_ShowNum(100,130,calendar.w_month,2,16);
OLED_ShowNum(33,6,calendar.w_month,1,16);
OLED_ShowString(50,6,".",16);
LCD_ShowNum(123,130,calendar.w_date,2,16);
OLED_ShowString(72,6,".",16);
OLED_ShowNum(53,6,calendar.w_date,2,16);
LCD_ShowNum(60,162,calendar.hour,2,16);
OLED_ShowString(70,6,".",16);
OLED_ShowNum(73,6,calendar.hour,2,16);
LCD_ShowNum(84,162,calendar.min,2,16);
OLED_ShowNum(93,6,calendar.min,2,16);
OLED_ShowString(88,6,".",16);
LCD_ShowNum(108,162,calendar.sec,2,16);
OLED_ShowString(108,6,".",16);
OLED_ShowNum(113,6,calendar.sec,2,16);
LED0=!LED0;
}
delay_ms(10);
AD_value = ADC_ConvertedValue;
AD_value = (AD_value/4096)*3.3;
printf("The current Sound AD value = %4.2fV \r\n", AD_value);
if(AD_value>=2)
{
14
OLED_ShowCHinese(90,2,31);
OLED_ShowCHinese(108,2,32);
delay_ms(200);
}
if(AD_value<2)
{
OLED_ShowCHinese(90,2,29);
OLED_ShowCHinese(108,2,30);
}
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
key=KEY_Scan(0); //õ
if(key)
{
switch(key)
{
case WKUP_PRES:
TIM_SetCompare2(TIM3,300);
OLED_ShowCHinese(90,4,25);
break;
case KEY1_PRES:
TIM_SetCompare2(TIM3,400);
OLED_ShowCHinese(90,4,27);
break;
case KEY0_PRES:
TIM_SetCompare2(TIM3,0);
OLED_ShowCHinese(90,4,28);
break;
}
}
}
}

4系统的软件设计

4.1软件设计
4.1.1系统软件设计
本本设计婴儿看护系统使用的程序编写软件是MDK,选择C语言作为编程语言
  是因为其更容易移植到单片机并读取。首先初始化IO口与定时器,检测婴儿是否哭闹,如果是,打开MP3播放音
乐,并启动摇篮,如果否,跳过程序;检测婴儿是否尿床,如果是,打开尿床提示灯,如果否,跳过程序;定时温
湿度采集是否到时,如果是,温湿度采集,如果否跳过程序;最后以上接收到的信息信号传送到显示器中进行实时更显示。
软件设计流程图如图4.1所示:在这里插入图片描述

4.1软件设计流程图
4.1.2远程控制软件设计
  首先使用WiFi模块 ESP-01WiFi收发器的softAP+station模式,就可以将WiFi模块链接到云服务器上,再用手机
端作为station链接 ESP-01的softAP接口。WiFi模块的最高传输速率可达到71.2兆每秒,完全满足手机端的数据传
输。在手机端的界面上有四个按键分别对应婴儿看护系统上按键模块的四个按键,这样就可以完成对婴儿看护系统
的远程控制,在手机应用主页面上,会显示尿床指示灯,婴儿看护系统的温湿度环境信息,也可以通过安装摄像头
的方式增加实时监控功能。
4.2本章小结
   本篇设计中的软件设计使用了C语言作为整篇程序编写的编程语言,简单易读,可以简单的实现本文设计的婴
儿看护系统所需要的功能,在手机端应用设计中使用了WiFi收发器自带的模式进行手机软件设计,实现了手机端对
婴儿看护系统的远程控制,方便了用户对本设计的使用。本设计脱离了传统婴儿看护系统,增加了更多的、更加实
用的功能,为看护婴儿提供了便利,为婴儿家庭减轻了压力,更是可以全面、安全看护婴儿。综上,本设计符合婴
儿家庭需求。

结论

本设计的婴儿看护系统由单片机和传感器的组合软件构成,本婴儿看护系统能够满足尿床检测功能,摇篮功能
等许多婴儿护理所需要的功能,根据用户需求可变更摇篮时间通过手机可以实现看护系统的远程控制和信息传输,
在满足宝宝基本生活需求的同时,护理人也可以更加方便的照顾宝宝。这次看护系统的设计,有着结构简单、获取外界信息能力强等特点,更重要的是系统容易操作,可以解决大部分护理婴儿时所产生的麻烦。
综上所述,本婴儿看护系统符合未来婴儿护理的发展趋势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值