树莓派基于api无线控制直流电机

前言

记录本人学习阶段笔记。


硬件


1.树莓派4B

2.笔记本
3.直流电机

4.准备个无线网

准备工作

1.树莓派跟笔记本连同一个wifi

2.硬件接好线。我这里使用的是15号引脚(BCM)

程序


树莓派程序

from flask import Flask, request
import RPi.GPIO as GPIO 
from time import sleep
app = Flask(__name__)
p_pin = 15
f_pin=14
GPIO.setmode(GPIO.BCM)
GPIO.setup(p_pin,GPIO.OUT)
GPIO.setup(f_pin,GPIO.OUT)
pwm_pin=GPIO.PWM(p_pin,500)#io,frequency
pwm_pin.start(0)#duty cycle
@app.route('/')
def hello_world():
    return 'hello world'
@app.route('/add', methods=['POST'])
def add():
   # print(request.headers)
   # print(type(request.json))
   # print(request.json)
    try:
 # while 1:

        speed=int(request.json['a'])
        pwm_pin.ChangeDutyCycle(speed)
    except KeyboardInterrupt:
        pwm_pin.stop(0)
        PIO.cleanup()
    result = request.json['a']
    return str(result)
if __name__ == '__main__':
    app.run(host='192.168.8.124', port=5000, debug=True)

上位机前端
 

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Grid Grid.Row="1" >
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Button Content="-减速" Height="40" Width="100" FontSize="20" x:Name="btn_jiansu" Click="btn_jiansu_Click"></Button>
                <TextBox Width="100" x:Name="txt_sudu" Height="40" ></TextBox>
                <Button Content="+加速" Height="40" Width="100" FontSize="20"  x:Name="btn_Add" Click="btn_Add_Click"></Button>
                <Button Content="最大" Height="40" Width="100" FontSize="20"  x:Name="btn_max" Click="btn_max_Click"></Button>
                <Button Content="停止" Height="40" Width="100"  FontSize="20" Background="Red"  x:Name="btn_top" Click="btn_top_Click"></Button>
            </StackPanel>

        </Grid>
    </Grid>

上位机后端

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private string Url= @"http://192.168.8.124:5000/add";
        public int i;
        private void btn_jiansu_Click(object sender, RoutedEventArgs e)
        {

            txt_sudu.Text = api(i=i-5);
        }

        private void btn_Add_Click(object sender, RoutedEventArgs e)
        {
            txt_sudu.Text = api(i=i + 5);
        }

        private void btn_max_Click(object sender, RoutedEventArgs e)
        {
            txt_sudu.Text = api(i=100);
        }

        private void btn_top_Click(object sender, RoutedEventArgs e)
        {
            txt_sudu.Text = api(i=0);
        }

        private void MetroWindow_Loaded(object sender, RoutedEventArgs e)
        {
           
            Url = @"http://192.168.8.124:5000/add";
        }

        private string api(int dara)
        {
            
            try
            {
                body model = new body();
                model.a = dara;
                string json = JsonConvert.SerializeObject(model);

                //var aa= KTHttpHelper.Post(Url, json);
                RequestModel request = new RequestModel();
                request.Url = Url;
                request.Mode = "POST";
                request.ContentType = "application/json";
                request.Content =json ;
                var aa = http(request);
                return aa;
            }
            catch(Exception ex)
            {
                return "返回空";
            }
           
        }
        public string http(RequestModel model)
        {
            Encoding uTF = Encoding.UTF8;
            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(new Uri(model.Url));
            httpWebRequest.Method = model.Mode;//请求方法
            httpWebRequest.Accept = "text/html, application/xhtml+xml, */*";
            httpWebRequest.Timeout = model.Timeout;//超时时间
            httpWebRequest.ContentType = model.ContentType;//内容格式
            if (model.Mode != "GET")
            {
                byte[] bytes = uTF.GetBytes(model.Content);
                httpWebRequest.ContentLength = bytes.Length;
                httpWebRequest.GetRequestStream().Write(bytes, 0, bytes.Length);
            }
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), uTF);
            return streamReader.ReadToEnd();
        }
        public class RequestModel
        {
            /// <summary>
            /// 地址
            /// </summary>
            public string Url { get; set; }
            /// <summary>
            /// 请求内容
            /// 
            /// </summary>
            public string Content { get; set; }
            /// <summary>
            /// 请求模式
            /// </summary>
            public string Mode { get; set; }
            /// <summary>
            /// 内容格式
            /// </summary>
            public string ContentType { get; set; }
            /// <summary>
            /// 超时时间
            /// </summary>
            public int Timeout { get; set; } = 2000;

        }
        public class body
        {
            public int a { get; set; }
        }
    }

效果:

收到了请求信号

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值