docs: update new-page2

This commit is contained in:
admin_bora 2024-03-17 22:25:35 +01:00 committed by admin_bora
parent 55f56743d4
commit 9daa3c4979
1 changed files with 151 additions and 1 deletions

View File

@ -2,7 +2,7 @@
title: Untitled Page
description:
published: 1
date: 2024-03-17T21:23:17.253Z
date: 2024-03-17T21:25:33.118Z
tags:
editor: ckeditor
dateCreated: 2024-01-20T16:43:58.062Z
@ -25,3 +25,153 @@ dateCreated: 2024-01-20T16:43:58.062Z
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>i want you to act as a software engineer. provide an example micropython script that uses concurrent processing with uasyncio on a multicore esp32 microcontroller. one thread is meant to subscribe to an mqtt topic. another thread to read an adc. the third thread to wait for a button push. the script should contain explicit code for the button waiting logic that sends an mqtt message upon pushing a button.</p>
<figure class="image"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHPSURBVHgB5VVLUsJAEH0TcI8nkCPgCUhOIJ5AjoAr5VNFWIDlSjxB4ATqCSZ4AbkBeANcYJWf0PaESvjMJIFSF5avKoTJzPTrft3TA/x1iMwVF9JGDhUIUQ7Hn3SKvJiga2fvZeQTZ1xZxIfw+F8JoFt+zjHHGH1nhrrshGvq0o3XW/DRdfzdCJbGJYge0HMcbd4SbbUqfC+og73RlAN+XP27T8Z3CnQdl94/sdbHuHammnETUvKhT7RkBQtUQay3wlKOZEPbxEoytSeRVCWuvoc8GTLpLA3ZZ+9n8fjHI2j5d0xSxa9EoBL8zuUZkBMnWMkVRZEVgfL+ynGTCZr+hD+56JaHqYa2sdOpbozabMRLXbOLPM3RGWqyEA1XJ1lQLaz970A5CbK5ncQKWGvTY25iHnsl0Xw8ge79DVfXNNW4oArm3AzXsCLo2txzOEmCS5SCQ4OJGl4TIlQdF1QNO61qhkaCkIS7YUAvSMLW5hh5PvmCi2O9tRgJFMIIUNC+H5ApqmjTEdfos5lbJ7hnbzxcyhnTl8LNAjbe1J3ALdoEQhGBOT96BEom4lzk+AazrAksGvJ481zscQeYL5yeM+DfQTyuy9LGfHTh/At8AbFO1bzfFyatAAAAAElFTkSuQmCC" alt="aiLogo"></figure>
<p>Certainly! Here's an example Micropython script that uses concurrent processing with uasyncio on a multicore ESP32 microcontroller. It includes three threads: one for subscribing to an MQTT topic, another for reading an ADC, and a third for waiting for a button push and sending an MQTT message upon button press.</p>
<pre><code class="language-python">import uasyncio as asyncio
from machine import Pin, ADC
from umqtt.simple import MQTTClient
# MQTT Configuration
mqtt_broker = "mqtt.example.com"
mqtt_topic = "my_topic"
mqtt_client_id = "esp32_client"
# Button Configuration
button_pin = Pin(14, Pin.IN, Pin.PULL_UP)
# ADC Configuration
adc_pin = Pin(34)
adc = ADC(adc_pin)
# MQTT Callback
def mqtt_callback(topic, msg):
print("Received MQTT message:", msg)
# MQTT Subscriber Task
async def mqtt_subscriber():
client = MQTTClient(mqtt_client_id, mqtt_broker)
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(mqtt_topic)
while True:
client.wait_msg()
# ADC Reader Task
async def adc_reader():
while True:
adc_value = adc.read()
print("ADC Value:", adc_value)
await asyncio.sleep(1)
# Button Waiter Task
async def button_waiter():
button_state = button_pin.value()
while True:
if button_pin.value() != button_state:
button_state = button_pin.value()
if button_state == 0:
print("Button Pressed!")
mqtt_client = MQTTClient(mqtt_client_id, mqtt_broker)
mqtt_client.connect()
mqtt_client.publish(mqtt_topic, "Button Pressed!")
mqtt_client.disconnect()
await asyncio.sleep_ms(100)
# Main Function
def main():
loop = asyncio.get_event_loop()
loop.create_task(mqtt_subscriber())
loop.create_task(adc_reader())
loop.create_task(button_waiter())
loop.run_forever()
# Run the Main Function
if __name__ == "__main__":
main()</code></pre>
<p>In this script, the <code>mqtt_subscriber</code> function sets up an MQTT client, connects to the broker, and subscribes to the specified topic. It then enters a loop where it waits for incoming MQTT messages using <code>client.wait_msg()</code>.</p>
<p>The <code>adc_reader</code> function continuously reads the ADC value from the specified pin and prints it every second using <code>adc.read()</code>.</p>
<p>The <code>button_waiter</code> function continuously checks the state of the button using <code>button_pin.value()</code>. If the button state changes (pressed or released), it sends an MQTT message with the button status.</p>
<p>The <code>main</code> function creates tasks for each of the three threads and runs the event loop using <code>loop.run_forever()</code>.</p>
<p>Please note that you may need to install the required libraries (<code>uasyncio</code> and <code>umqtt.simple</code>) before running this script on your ESP32 microcontroller.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>i want you to act as a software engineer. provide an example micropython script that uses concurrent processing with uasyncio on a multicore esp32 microcontroller. one thread is meant to subscribe to an mqtt topic. another thread to read an adc. the third thread to wait for a button push. the script should contain explicit code for the button waiting logic that sends an mqtt message upon pushing a button. two of the threads should run on one core and the third one on the second core.</p>
<figure class="image"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHPSURBVHgB5VVLUsJAEH0TcI8nkCPgCUhOIJ5AjoAr5VNFWIDlSjxB4ATqCSZ4AbkBeANcYJWf0PaESvjMJIFSF5avKoTJzPTrft3TA/x1iMwVF9JGDhUIUQ7Hn3SKvJiga2fvZeQTZ1xZxIfw+F8JoFt+zjHHGH1nhrrshGvq0o3XW/DRdfzdCJbGJYge0HMcbd4SbbUqfC+og73RlAN+XP27T8Z3CnQdl94/sdbHuHammnETUvKhT7RkBQtUQay3wlKOZEPbxEoytSeRVCWuvoc8GTLpLA3ZZ+9n8fjHI2j5d0xSxa9EoBL8zuUZkBMnWMkVRZEVgfL+ynGTCZr+hD+56JaHqYa2sdOpbozabMRLXbOLPM3RGWqyEA1XJ1lQLaz970A5CbK5ncQKWGvTY25iHnsl0Xw8ge79DVfXNNW4oArm3AzXsCLo2txzOEmCS5SCQ4OJGl4TIlQdF1QNO61qhkaCkIS7YUAvSMLW5hh5PvmCi2O9tRgJFMIIUNC+H5ApqmjTEdfos5lbJ7hnbzxcyhnTl8LNAjbe1J3ALdoEQhGBOT96BEom4lzk+AazrAksGvJ481zscQeYL5yeM+DfQTyuy9LGfHTh/At8AbFO1bzfFyatAAAAAElFTkSuQmCC" alt="aiLogo"></figure>
<p>Certainly! Here's an updated example Micropython script that uses concurrent processing with uasyncio on a multicore ESP32 microcontroller. It includes three threads: one for subscribing to an MQTT topic, another for reading an ADC, and a third for waiting for a button push. The first two threads will run on one core, and the third thread will run on the second core.</p>
<pre><code class="language-python">import uasyncio as asyncio
from machine import Pin, ADC
from umqtt.simple import MQTTClient
import _thread
# MQTT Configuration
mqtt_broker = "mqtt.example.com"
mqtt_topic = "my_topic"
mqtt_client_id = "esp32_client"
# Button Configuration
button_pin = Pin(14, Pin.IN, Pin.PULL_UP)
# ADC Configuration
adc_pin = Pin(34)
adc = ADC(adc_pin)
# MQTT Callback
def mqtt_callback(topic, msg):
print("Received MQTT message:", msg)
# MQTT Subscriber Task
async def mqtt_subscriber():
client = MQTTClient(mqtt_client_id, mqtt_broker)
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(mqtt_topic)
while True:
client.wait_msg()
# ADC Reader Task
async def adc_reader():
while True:
adc_value = adc.read()
print("ADC Value:", adc_value)
await asyncio.sleep(1)
# Button Waiter Task
def button_waiter():
button_state = button_pin.value()
while True:
if button_pin.value() != button_state:
button_state = button_pin.value()
if button_state == 0:
print("Button Pressed!")
mqtt_client = MQTTClient(mqtt_client_id, mqtt_broker)
mqtt_client.connect()
mqtt_client.publish(mqtt_topic, "Button Pressed!")
mqtt_client.disconnect()
asyncio.sleep_ms(100)
# Main Function
def main():
loop = asyncio.get_event_loop()
loop.create_task(mqtt_subscriber())
loop.create_task(adc_reader())
# Run button_waiter on the second core
_thread.start_new_thread(button_waiter, ())
loop.run_forever()
# Run the Main Function
if __name__ == "__main__":
main()</code></pre>
<p>In this updated script, the <code>mqtt_subscriber</code> and <code>adc_reader</code> functions remain the same as before. They are created as tasks in the event loop using <code>loop.create_task()</code>.</p>
<p>The <code>button_waiter</code> function is modified to run on a separate core using the <code>_thread.start_new_thread()</code> function. This function starts a new thread and assigns it to the second core, allowing it to run concurrently with the other two threads.</p>
<p>Please note that running threads on separate cores requires the <code>micropython-ulab</code> library to be installed on your ESP32 microcontroller. You can install it using the <code>upip</code> package manager by running <code>upip.install('micropython-ulab')</code> before running this script.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>