既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
Keil的安装笔者就不赘述了,网上资料很多。
关于STM32CubeMX的安装和使用请参看笔者博文。
1. STM32CubeMX配置
接下来打开STM32F103C8x.ioc,配置好相应LED。首先查看相应的电路图。
RGB灯分别接到MCU的PA9、PB8、PB9,因此需要配置这三个GPIO,配置生输出模式即可。
然后生成代码。
2.驱动文件编写
将官方demo中hal文件夹下的delay.h、delay.c、hal_rgb_led.h、hal_rgb_led.c文件拷贝到工程目录下hal文件夹。
然后打开Keil工程,将delay.c和hal_rgb_led.c添加到工程中。
当然啦,如果是自己的设备,这里就需要自行编写驱动文件。
3.修改代码
首先是初始化外设,在 Gizwits 目录下的 gizwits_product.c 文件中userInit()函数中。
修改前:
v
oid userInit(void)
{
memset((uint8_t\*)¤tDataPoint, 0, sizeof(dataPoint_t));
/\*\* Warning !!! DataPoint Variables Init , Must Within The Data Range \*\*/
currentDataPoint.valueLED_OnOff = ;
\*/
}
修改后:
void userInit(void)
{
memset((uint8_t\*)¤tDataPoint, 0, sizeof(dataPoint_t));
delay\_init(72); // 延时 初始化
rgbLedInit(); // RGB LED 初始化
/\*\* Warning !!! DataPoint Variables Init , Must Within The Data Range \*\*/
currentDataPoint.valueLED_OnOff = 0;
}
在 Gizwits 目录下的 gizwits_product.c 文件中的gizwitsEventProcess()函数中处理相应事件即可(如下例中的 ledRgbControl(),功能是控制 RGB 灯的颜色) 。
下面以控制 RGB LED 为例, 代码示例如下:
修改前:
if(0x01 == currentDataPoint.valueLED_ONOFF)
{
//user handle
}
else
{
//user handle
}
break;
修改后:
if(0x01 == currentDataPoint.valueLED_ONOFF)
{
//user handle
ledRgbControl(0,254,0);
}
else
{
//user handle
ledRgbControl(0,0,0);
}
break;
如果有其他的传感器设备,首先要完成的是传感器驱动开发,然后在 user 目录下gizwits_product.c文件中的 userHandle()函数中实现传感器数据采集,用户只需并将采集到的数值赋值给对应用户区的设备状态结构体数据位即可。
修改前:
void userHandle(void)
{
/\*
\*/
}
修改后:
void userHandle(void)
{
uint8_t ret = 0;
static uint32_t thLastTimer = 0;
///< 新添加代码: 温湿度传感器数据获取
if((gizGetTimerCount()- thLastTimer) > 2000) //上报间隔2S
{
//ret = dht11Read((uint8\_t \*)¤tDataPoint.valueTemperature,(uint8\_t\*)¤tDataPoint.valueHumidity);
//if(ret != 0)
//{
// GIZWITS\_LOG("Failedto read DHT11 [%d] \n", ret);
//}
thLastTimer = gizGetTimerCount();
}
}
值得注意的是,关于驱动的头文件需要包含到gizwits_product.c中,请根据实际情况添加。
最后在main.h中添加相应的GPIO定义。
#define RGB\_LED\_EN\_Pin GPIO\_PIN\_0
#define RGB\_LED\_EN\_GPIO\_Port GPIOA
#define RGBLED\_CLK\_Pin GPIO\_PIN\_8
#define RGBLED\_CLK\_GPIO\_Port GPIOB
#define RGBLED\_DIN\_Pin GPIO\_PIN\_9
#define RGBLED\_DIN\_GPIO\_Port GPIOB
当然啦,为了方便联网,需要在main.c 文件的 key2ShortPress( ) 函数与 key2LongPress( ) 函数中添加点亮LED代码。
void key2ShortPress(void)
{
GIZWITS\_LOG("KEY2 PRESS ,Soft AP mode\n");
#if !MODULE\_TYPE
gizwitsSetMode(WIFI_SOFTAP_MODE);
#endif
ledRgbControl(250,0, 0);
}
void key2LongPress(void)
{
//AirLink mode
GIZWITS\_LOG("KEY2 PRESS LONG ,AirLink mode\n");
#if !MODULE\_TYPE
gizwitsSetMode(WIFI_AIRLINK_MODE);
#endif
ledRgbControl(0, 250, 0);
}
最后编译下载固件即可,笔者使用的是ST-link下载。
当然也可使用串口下载,在下载前,需要准备好固件。
在Keil中,需要勾选输出HEX文件,然后编译即可。
接下来就是使用串口下载固件,方法如下。
将底板的开关拔到system。
打开串口烧录软件mcuisp.exe。点击‘开始编程’。
等待下载完成即可。
值得注意的是,不同的开发板,串口下载操作不同,请根据实际情况操作,笔者这里使用的是GoKit3。
烧录完成之后将开关拔回flash,复位模组,就可以正常运行程序。
1.4.3设备连接(WiFi版)
GoKit3提供两种配置入网方式:AirLink、SoftAP。笔者这里使用SoftAP 配置入网。
1) 打开 GoKit 的 SoftAP 配置模式
短按 Key2 键, 待扩展板上常亮红灯后, 说明 WiFi 模块进入 SoftAP 配置状态(如下图) 。
2) 打开机智云APP,为ESP32配网
在弹出的界面中选择‘热点配置’。
然后输入可用的 WiFi 并输入对应的密码。还需要设置ESP32的WiFi热点及密码,形如“XPG-GAgent-XXXX” 的 WiFi 热点密码:123456789。
注意: XXXX 是 WiFi 模组的 MAC 后四位。
等待连接完成即可。连接成功后,打开相应的设备即可进行控制。
当然啦,还可使用前面开发的移动应用管理设备,自行生成的APP是通过扫描设备二维码添加设备的,因此这里需要生成一个设备二维码。生成设备二维码需要在机智云APP中查看,如下图所示。
然后打开‘机智云串口调试助手.exe’。
填写相应的Product Key以及MAC即可。
然后使用自己生成的APP添加设备即可,接下来的操作和添加虚拟设备的操作都是一样的。
1.4.4设备连接(4G版)
这里还是用GoKit3硬件平台,但是需要取下WiFi模组,连接4G设备,笔者这里使用的官网的转接板。
如果没有转接板,则需要按照下图方式连接。
注意:4G模块启动的电流较大,需要外接电源,同时接上4G天线。
然后打开‘机智云串口调试助手.exe’。
填写相应的Product Key以及IMEI即可。
打开云端,即可看到设备已经在线。
然后打开移动应用,进行设备连接。
接下来就可以控制LED了。
接下来就可以尽情的玩耍了。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
r)
接下来就可以尽情的玩耍了。
[外链图片转存中…(img-1dY4IWlD-1715820752754)]
[外链图片转存中…(img-CQSf6Clu-1715820752754)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!