Exemplo Código para CH9143 – Comunidade de Dev

O CH9143 é um transceptor UART para Ble. Quando um Central/Master estiver conectado, ele terá duas características (canais), uma para leitura (notificações) e outra para escrever. Quando você escreve da Central, pode ler da serial e quando escrever para série, receberá uma notificação no Central. A placa é do WEACT: o chip contém dois modos que podem ser definidos através de níveis baixos/altos: modos mestre e escravo (pino ble_mode no IC). A configuração mestre funciona apenas para emparelhar com outros CH9143 / CH9140 / CH9141, criando um ponto para apontar a comunicação serial. Se não encontrar outro dispositivo para emparelhar nos primeiros segundos após a alimentação, ele entrará no modo escravo. No modo (no pino no IC), isso permite definir o chip no modo para que o UART possa ser enviado com comandos AT para definir algumas configurações, como Mac, Mac emparelhado Mac, TX Power ou UART Configurações. Se o modo AT estiver desativado, estará no “modo transparente”, que está enviando e recebendo dados através do console serial. É importante observar que, quando no modo estiver ativado, você não receberá ou enviará dados para o dispositivo central ble. A imagem a seguir mostra o interruptor na placa e o que permite cada posição. Para testar, você precisará conectar a placa CH9143 através do USB ou de um conversor USB para TTL. Como nota, use pinos USB ou RX/TX, se você usar os dois, receberá dados ilegais no RX/TX, você também precisa de um dispositivo BLE disponível, para verificar se o tiver, você pode experimentar o HELT e o MODE DE CELO EM MODOS FELIMENTOS: MODOS FELIMENTOS: MODOS FELIOS EXTENSCELOS EXTENHO EM MODOS FELIMENTOS: HCI0 XX: XX: xx: xx: xx: xx Enter FullScreen: xx Modo de tela completa: HCI0 XX: xx: xx: xx: xx: xx Enter Mode completo UART requisitos.txt pyserial == 3.5 Digite o modo de tela cheia Sair Modo de tela cheia uart.po importar serial idoste de importação Importar o tempo de importação keep_reading = true send_idx = 0 def read_serial (serinhor: serial.in_wait): while keep_reading: se ser.ininwaiting (wapers = ster.in_wait): while keep_reading: se Ser.inwaiting> 0: Serial.in_wait): print (“Entrada serial:”, linha) def send_at_command (Ser: Serial.Serial, comando: str) -> str: # Enviar comando ser.write (f “{comando} \ r \ n” .encode (“ascii”)) # Leia o comando retornar ser.readline (). decode (“ascii”). argparse.argumentParser (prog = “CH9143 UART Exemplo”) parser.add_argument (“-use-at com-commands”, help = “use at comandos”, ação = argparse.booCeanOptionActionActionAction como parser.add_argument (“serial_port”, ajuda “” parser.parse_args () params = {“port”: args.serial_port, “baudrate”: 115200, “bytesize”: serial.eightbits, “parity”: serial.parity_none, “stopbits”: serial.stopbits_one, “timeout”: 1,}. Serial.Serial (** params) como serr: se args.use_at_Commands: print (“enviando em … (verificando se estiver ativado)”) print (“Resposta:”, send_at_command (Ser “) Mac = send …”)) Print (“Enviar em+mac? (CHECKING CURREL)”) Mac = Send_at_Comm) mac.split (“:”) mac.versever () mac = “:”. junção (mac) print (“resposta:”, mac) print (“enviando em+ccadd? (verificando mac)) print (” Resposta: “, segment_at_at_command (shread” em+ccadd? args = (Ser,)) thread_read.start () tente: while true: print (f “enviando ping {send_idx}”) ser.write (f “uart ping {send_idx}”. Modo de tela cheia Modo de saída de tela cheia para executar: python3 uart/uart.py/dev/ttyacm0 Digite o modo de saída de tela cheia de tela cheia e a saída será assim: Porta de abertura:/dev/ttyacm0 Criando um ping de fundo de ping Receber 4 Enviando ping 0 envia ping 1 envio de ping 2 ping ping 3 Ping Ping 4 Ping 6 Entrada serial: Host Ping 2 Enviando ping 7 enviando ping 8 Digite Modo de tela cheia Modo de tela cheia As mensagens de ping do host são quando o central ble é conectado a ble para o lado central ble estará em pasta BLE: requisitos. scanner = bleakScanner () dispositivo = aguardar scanner.find_device_by_name (“CH9143BLE2U”) se não o dispositivo: print (“falhou em encontrar CH9143BLE2U Device”): Sys.Exit (1) PRIM (“Device:” Device) Device.AdREssRaSTRARATIFACT (1) Print (“Device:” Device) Return Device. De dispositivo: “, data.decode (” utf-8 “)) assíncrono def connect_to_mac (device_mac: str): print (” conectando-se ao mac “, device_mac) client = bleakclient (device_mac) aguardar client.connect () imprimir (” listar switing in sweets) uuid_write = nenhum uuid_ait_ait.connect () print (“listagem ingerting in) uuid_write = nenhum uuid_read_read_read.Connect ()[Service] {0}: {1} “.[0:4] == “0000” e Service.uuid[4:8] == “fff0”: print (“encontrado serviço transparente”) para char em serviço.Characteristics: # print (“char”, char, char.properties) # depuração impressão se char.uuid[4:8] == “fff1”: uuid_read = char.uuid elif char.uuid[4:8] == “fff2”: uuid_write = char.uuid se uuid_read e uuid_write: print (“encontrou características necessárias, leia:”, uuid_read “, whret:”, uuid_write) send_id_idx = 0 wait client.start_notify (uuid_write,) sendify) {send_idx} “) Await client.write_gatt_char (uuid_write, f” host ping {send_idx} “. CH9143 host “) parser.add_argument (“–device-mac “, padrão = nenhum, tipo = str, help =” dispositivo mac para conectar “,) args = parser.parse_args () se não args.device_mac: device_mac = wait Discover_mac () else: Device_mac asyncio.run(main()) Enter fullscreen mode Exit fullscreen mode You can run like this: python3 ble/ble-central.py Enter fullscreen mode Exit fullscreen mode This will discover a device with CH9143BLE2U, if you have multiple devices then you need to supply the mac as will connect to the first device it findsThe output looks like: Found device: XX:XX:XX:XX:XX:XX: CH9143ble2u conectando -se ao Mac XX: xx: xx: xx: xx: xx Serviços de listagem
[Service] 0000FFF0-0000-1000-8000-00805F9B34FB: Serviço transparente encontrado específico do fornecedor
[Service] 00001801-0000-1000-8000-00805f9b34fb: Generic Attribute Profile Found needed characteristics, read: 0000fff1-0000-1000-8000-00805f9b34fb , write: 0000fff2-0000-1000-8000-00805f9b34fb Sending ping 0 Sending ping 1 Got from device: UART PING 5 Sending ping 2 Obteve do dispositivo: o UART Ping 6 obtido do dispositivo: Uart Ping 7 Digite Modo de tela cheia Modo de tela cheia. Mas, sem coisas como a capacidade de definir o nome do dispositivo, limitará o número de aplicativos. Também é possível que a mudança para o modo no modo pode receber dados errados de pacotes anteriores recebidos, para que os dados precisem ser limpos. No caso do quadro, essa configuração é através de um interruptor físico que torna impossível para os aplicativos reais usá -lo, pois nos modos são coisas que precisam ser trocadas através de um MCU

Fonte

Você pode ter perdido